From 48f186d358396fdb4e9abd7fd72d08c0fa7023d0 Mon Sep 17 00:00:00 2001 From: Ralph Bean Date: Fri, 19 Dec 2014 15:20:19 +0000 Subject: [PATCH] Try out apps.fp.o. --- playbooks/groups/proxies-miscellaneous.yml | 4 + roles/apps-fp-o/README | 5 + roles/apps-fp-o/files/apps.yaml | 462 ++++++++++++++++++ roles/apps-fp-o/files/global/js/jsopenid.js | 83 ++++ roles/apps-fp-o/files/global/jsopenid.js | 83 ++++ roles/apps-fp-o/handlers/main.yml | 5 + roles/apps-fp-o/tasks/main.yml | 48 ++ .../templates/apps.fp.o-proxy.conf.erb | 1 + 8 files changed, 691 insertions(+) create mode 100644 roles/apps-fp-o/README create mode 100644 roles/apps-fp-o/files/apps.yaml create mode 100644 roles/apps-fp-o/files/global/js/jsopenid.js create mode 100644 roles/apps-fp-o/files/global/jsopenid.js create mode 100644 roles/apps-fp-o/handlers/main.yml create mode 100644 roles/apps-fp-o/tasks/main.yml create mode 100644 roles/apps-fp-o/templates/apps.fp.o-proxy.conf.erb diff --git a/playbooks/groups/proxies-miscellaneous.yml b/playbooks/groups/proxies-miscellaneous.yml index 216fe67cb9..ded93837da 100644 --- a/playbooks/groups/proxies-miscellaneous.yml +++ b/playbooks/groups/proxies-miscellaneous.yml @@ -41,3 +41,7 @@ - role: releng-dash website: apps.fedoraproject.org path: /releng-dash + + - role: apps-fp-o + website: apps.fedoraproject.org + path: / diff --git a/roles/apps-fp-o/README b/roles/apps-fp-o/README new file mode 100644 index 0000000000..ac4bb13787 --- /dev/null +++ b/roles/apps-fp-o/README @@ -0,0 +1,5 @@ +========= +apps-fp-o +========= + +A landing page for https://apps.fedoraproject.org/ featuring javascript magic. diff --git a/roles/apps-fp-o/files/apps.yaml b/roles/apps-fp-o/files/apps.yaml new file mode 100644 index 0000000000..397d36b74e --- /dev/null +++ b/roles/apps-fp-o/files/apps.yaml @@ -0,0 +1,462 @@ +%YAML 1.2 +--- + +name: Fedora Apps +data: + description: > + This is a landing page for Fedora Apps. Fedora Infrastructure is + huge; this page details only the public facing portion of + it all. Explore! +children: +- name: In Development + data: + description: > + These are the apps that we're working on, but that aren't quite + ready for prime-time yet. Try and use them, and report bugs when + they're broken -- it's a big help!. + Check back here from time to time, as this section will change. + children: + - name: Koschei + data: + url: http://koschei.cloud.fedoraproject.org + description: > + Koschei is a continuous integration system for RPM packages. It + tracks dependency changes done in Koji repositories and rebuilds + packages whose dependencies change. It can help packagers to + detect failures early and provide relevant information to narrow + down the cause. + - name: Release Monitoring + data: + url: http://release-monitoring.org + description: > + Code named anitya, this + project is slated to replace the + old wiki page for Upstream Release Monitoring. It will + track upstream tarball locations and publish notifications to + the fedmsg bus when new ones are found. Other daemons will + then be responsible for filing bugs, attempting to + automatically build packages, perform some preliminary QA + checks, etc.. + - name: Jenkins + data: + url: http://jenkins.cloud.fedoraproject.org + description: > + Our own continuous integration (CI) service! It works now and + you can use it.. we just don't yet give it the same kind of + guarantees that we give our other apps. Look forwards to us + promoting it soon.. + +- name: Infrastructure + data: + description: > + Tools for sysadmins -- the people who run the servers that run + Fedora (and otherwise). + children: + - name: GeoIP + data: + url: https://geoip.fedoraproject.org + description: > + A simple web service running geoip-city-wsgi + that will return geoip information to you. + - name: Easyfix + data: + url: http://fedoraproject.org/easyfix + description: > + A list of easy-to-fix problems for the different projects in + Fedora. Interested in getting into helping out with sysadmin + work or web application development? This should be useful + to you. + - name: DataGrepper + icon: fedmsg.png + data: + url: https://apps.fedoraproject.org/datagrepper + status_mappings: ['fedmsg'] + description: > + DataGrepper is an HTTP API for querying the datanommer + database. You can use it to dig into the history of the + fedmsg message bus. You + can grab events by username, by package, by message + source, by topic... you name it. + + - name: Status + icon: status-good.png + data: + url: http://status.fedoraproject.org + description: > + Sometimes the Fedora Infrastructure team messes up (or + lightning strikes our datacenter(s)). Sorry about that. + You can use this website to check the status. Is it + "down for everyone, or just me?"
Notice the favicon + in your browser tab. It changes based on the status, + so if you keep this open you can check back to it at a + glance. + - name: MirrorManager + icon: downloads.png + data: + url: http://mirrors.fedoraproject.org + status_mappings: ['mirrormanager', 'mirrorlist'] + description: > + Fedora is distributed to millions of systems globally. + This would not be possible without the donations of time, + disk space, and bandwidth by hundreds of volunteer system + administrators and their companies or institutions. Your + fast download experience is made possible by these + donations. The list on the MirrorManager + site is dynamically generated every hour, listing only + up-to-date mirrors. + - name: Nagios + icon: nagios-logo.png + data: + url: http://admin.fedoraproject.org/nagios + description: > + "Is telia down?" The answer can most definitively be + found here (and in detail). The Fedora Infrastructure + team uses Nagios to monitor the servers that serve + Fedora. Accessing most details requires membership + in the sysadmin group. + - name: Collectd + icon: collectd.png + data: + url: http://admin.fedoraproject.org/collectd + description: > + Tracks and displays statistics on the Fedora + Infrastructure machines over time. Useful for debugging + ineffeciencies and problems. + - name: HAProxy + data: + url: http://admin.fedoraproject.org/haproxy/proxy1 + description: > + Shows the health of our proxies. How many bytes? + Concurrent sessions? Health checks? +- name: QA + data: + description: > + Tools for testers -- the people who tell us its broken so we can + fix it. + children: + - name: Taskotron + data: + url: https://taskotron.fedoraproject.org + description: > + Taskotron is a framework for automated task execution and is in + the very early stages of development with the objective to + replace AutoQA for automating selected QA tasks in Fedora. + - name: Releng-Dash + data: + url: https://apps.fedoraproject.org/releng-dash/ + description: > + Track the status of the Fedora Release Engineering process. + Did the latest rawhide get rsynced out? How about for the + secondary arches? This read-only dashboard can help you + make a quick check. + - name: Problem Tracker + data: + url: https://retrace.fedoraproject.org + description: > + The Problem Tracker is a platform for collecting and + analyzing package crashes reported via ABRT (Automatic Bug + Reporting Tool). It makes it easy to see what problems + users are hitting the most, and allows you to filter them + by Fedora release, associate, or component. + - name: Blocker Bugs + data: + url: http://qa.fedoraproject.org/blockerbugs + status_mappings: ['blockerbugs'] + description: > + The Fedora Blocker Bug Tracker tracks release blocking bugs + and related updates in Fedora releases currently under + development. + - name: Bugzilla + icon: bugzilla.png + data: + url: http://bugzilla.redhat.com + description: > + The Fedora Community makes use of a bugzilla instance + run by Red Hat. Notice something wrong with a Fedora + package? You can file an official bug here. + - name: Kerneltest + icon: tux.png + data: + url: https://apps.fedoraproject.org/kerneltest + description: > + As part of the kernel + testing initiative we provide a webapp where users and + automated systems can upload test results. If you have + access to hardware where we could catch tricky driver + issues, your assistance here would be much appreciated. +- name: Coordination + data: + description: > + Tools for people -- so we can talk to each other and share content + and ideas. + children: + - name: Paste + data: + url: http://paste.fedoraproject.org + status_mappings: ['fedorapaste'] + description: > + Our very own pastebin server. If you yum install the + fpaste command, it will use this site + automatically. + - name: Elections + data: + url: http://admin.fedoraproject.org/voting + status_mappings: ['elections'] + description: > + As a member of the community, you can now vote for the + different steering committees and for this you will use the + Election application. Voting is a right and a duty as a member + of the community; it is one of the things you can do to + influence the development of Fedora. + - name: Nuancier + icon: nuancier.png + data: + url: http://apps.fedoraproject.org/nuancier + description: > + Nuancier is a simple voting application for the + supplementary wallpapers included in Fedora. + - name: The Mailing lists + icon: mail.png + data: + url: http://lists.fedoraproject.org + status_mappings: ['mailinglists'] + description: > + Mailing lists are used for communication within the community. + There are lists for generic topics and lists more dedicated + to a specific topic, there is for sure one for you. + - name: FedoCal + icon: fedocal.png + data: + url: http://apps.fedoraproject.org/calendar + status_mappings: ['fedocal'] + description: > + The Fedora Calendar (or fedocal), you might + have already guessed, is a public calendar service. You can + create your own calendar, or subscribe to others. Want to + be kept abrest of releases, freezes, and events? This is + the tool for you. + - name: Meetbot + icon: meetbot.png + data: + url: https://meetbot.fedoraproject.org + status_mappings: ['zodbot'] + description: > + Fedora Infrastructure runs a friendly IRC bot that you may + know named zodbot. + Among its many and varied functions is logging IRC meetings, + the archives of which you can find here. + +- name: Upstream + data: + description: > + Tools for upstream + developers -- because we love you. + + children: + - name: github2fedmsg + icon: github.png + data: + url: https://apps.fedoraproject.org/github2fedmsg + status_mappings: ['fedmsg'] + description: > + github2fedmsg is a web service that bridges upstream + development activity from GitHub into the Fedora Infrastructure message + bus. Visit the self-service dashboard to toggle the + status of your repositories. + - name: Fedora Hosted + icon: trac.png + data: + url: http://fedorahosted.org + status_mappings: ['fedorahosted'] + description: > + Fedora is dedicated to open source software. This + commitment can extend beyond regular Fedora offerings.
+ Fedora Hosted is our most feature rich + hosting solution. It includes an scm, trac instance, + release dir, account system for access control, etc. + This is our most common hosting option. When most groups + want hosting, this is what they want. +- name: Accounts + data: + description: > + Tools for everybody -- use these things to manage your Fedora + Account. + children: + - name: FedoraPeople + data: + url: https://fedorapeople.org + status_mappings: ['people'] + description: > + Being a community member you gain access to fedorapeople which + provides you with a space on the web where you can upload + files to share them with the community. + - name: FAS + data: + url: http://admin.fedoraproject.org/accounts + status_mappings: ['fas'] + description: > + The Fedora Account System. Update your profile + information and apply for membership in groups. + - name: Notifications + icon: fedmsg.png + data: + url: https://apps.fedoraproject.org/notifications + status_mappings: ['fedmsg'] + description: > + Centrally managed preferences for Fedora Infrastructure + notifications to your inbox, irc client, and mobile device. + - name: Badges + icon: badges.png + status_mappings: ['badges'] + data: + url: https://badges.fedoraproject.org + description: > + An achievements system for Fedora Contributors! "Badges" + are awarded based on activity in the community. Can you + unlock them all? + You can export your badges to Mozilla's + Open Badges + Infrastructure +- name: Content + data: + description: > + Tools for wordsmiths -- the apps that store and archive the troves + of content that Fedora authors produce. Blog posts, the wiki, and + more.. + children: + - name: Ask Fedora + icon: ask_fedora.png + data: + url: http://ask.fedoraproject.org/ + status_mappings: ['ask'] + description: > + Any question at all about Fedora? Ask it here. + - name: The Wiki + icon: mediawiki.png + data: + url: http://fedoraproject.org/wiki + status_mappings: ['wiki'] + description: > + Maintain your own user profile page, contribute to + documents about features, process, and governance. + - name: Fedora Magazine + icon: magazine.png + data: + url: http://fedoramagazine.org + description: > + Fedora Magazine is a WordPress-based site which delivers all + the news of the Fedora Community. (It replaces the previous + Fedora Weekly News.) + - name: The Planet + icon: planet_logo.png + data: + url: http://planet.fedoraproject.org + description: > + The planet is a blog aggregator, a space accessible to you + as a community member where you can express your opinion and + talk about what you are doing for Fedora. + - name: Docs + data: + url: http://docs.fedoraproject.org + status_mappings: ['docs'] + description: > + RTFM! Everything you could ever want to know. + Probably the best place to find documentation about Fedora, + including the changes between releases (and a big kudos to + the translation teams to keep this resource up to date in + the different languages!) +- name: Packaging + data: + description: > + Tools for packagers -- where the pieces of the distribution get + built. + + children: + - name: Packages + data: + url: http://apps.fedoraproject.org/packages + status_mappings: ['packages'] + description: > + A meta-app over the other packaging apps; the best place to + find out what is in the Fedora repositories. Which + packages are present in which version, who is maintaining + them, what patches have been applied, what bugs have been + reported against them. All these kind of questions can be + answered here. + It is sometimes called "Fedora Community v2" after the old + Fedora Community site. + - name: Tagger + icon: tagger.png + data: + url: http://apps.fedoraproject.org/tagger + status_mappings: ['tagger'] + description: > + Help build a tag cloud of all our packages.. It's actually + really useful. It'll help improve the search of the + "Packages" webapp. + - name: COPR + icon: copr.png + data: + url: https://copr.fedoraproject.org + status_mappings: ['copr'] + description: > + Copr is an easy-to-use automatic build system providing a + package repository as its output. You can make your **own** repositories! + - name: PkgDB + data: + url: http://admin.fedoraproject.org/pkgdb + status_mappings: ['pkgdb'] + description: > + Manage ACLs of your packages. + - name: Koji + icon: koji.png + data: + url: http://koji.fedoraproject.org/koji + status_mappings: ['koji'] + description: > + Koji is the software that builds RPM packages for the + Fedora project. It uses Mock to create chroot + environments to perform builds that are both safe and + trusted. + - name: Bodhi + icon: bodhi.png + data: + url: http://admin.fedoraproject.org/updates + status_mappings: ['bodhi'] + description: > + The tool you will use to push your packages to the Fedora + repositories as an update, first an update to be tested + (repository: updates-testing) then a stable update + (repository: updates). Behold -- the Magic + Cabbage. + - name: SCM + icon: git-logo.png + data: + url: http://pkgs.fedoraproject.org/cgit + status_mappings: ['pkgs'] + description: > + Ever wonder exactly what is in the new release + of a Fedora package? This is where the change histories + of all the packages in Fedora for every release of + Fedora (and EPEL) are kept.. forever! A gold mine. + - name: Darkserver + data: + url: https://darkserver.fedoraproject.org + status_mappings: ['darkserver'] + description: > + A set of tools and JSON service to help userspace developers + to debug their applications and libraries. People are be + able query the service based on build-id(s) + or rpm package names. + + You can read more about why you + might want to use it or you can just click below to... diff --git a/roles/apps-fp-o/files/global/js/jsopenid.js b/roles/apps-fp-o/files/global/js/jsopenid.js new file mode 100644 index 0000000000..47d0f9c077 --- /dev/null +++ b/roles/apps-fp-o/files/global/js/jsopenid.js @@ -0,0 +1,83 @@ +/** + * Copyright (c) 2014, Patrick Uiterwijk + * All rights reserved. + * + * This file is part of JSOpenID. + * + * JSOpenID is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * JSOpenID is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with JSOpenID. If not, see . + */ + +function respondToLogin(targetOrigin, success, data) +{ + // From an iframe, window.parent == parent window + // So if we don't have a window.parent, we're certainly not an iframe + if(window.parent != null) + { + // If we don't have this element in the parent window, this is not an auth iframe + if(window.parent.document.getElementById('jsopenid_ifrm') != null) + { + window.parent.postMessage({"success": success, + "data": data}, + targetOrigin); + } + } +} + +function tryBackgroundLogin(login_url, callback_success, callback_failed) +{ + if(window.parent != null) + { + // Check if we are called recursively (from within a login attempt) + if(window.parent.document.getElementById('jsopenid_ifrm') != null) + { + return; + } + } + + // Create the iframe we are going to use + ifrm = document.createElement('iframe'); + ifrm.id = 'jsopenid_ifrm'; + ifrm.src = login_url; + ifrm.style.width = 0; + ifrm.style.height = 0; + ifrm.style.visibility = "hidden"; + + // Set up for pingbacks + window.addEventListener('message', function(event) + { + // We don't check don't check event.origin, as it wouldn't add anything worthwhile + // This would prevent a rogue website from saying "The user is now logged in", but we should *never* trust this anyway + // This whole library is only for user convenience + if(event.source != ifrm.contentWindow) + { + // Ignoring response from someone unexpected + return; + } + document.body.removeChild(ifrm); + if(event.data["success"]) + { + callback_success(event.data["data"]); + } + else + { + if(callback_failed != null) + { + callback_failed(event.data["data"]); + } + } + }, false); + + // HIT IT! + document.body.appendChild(ifrm); +} diff --git a/roles/apps-fp-o/files/global/jsopenid.js b/roles/apps-fp-o/files/global/jsopenid.js new file mode 100644 index 0000000000..47d0f9c077 --- /dev/null +++ b/roles/apps-fp-o/files/global/jsopenid.js @@ -0,0 +1,83 @@ +/** + * Copyright (c) 2014, Patrick Uiterwijk + * All rights reserved. + * + * This file is part of JSOpenID. + * + * JSOpenID is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * JSOpenID is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with JSOpenID. If not, see . + */ + +function respondToLogin(targetOrigin, success, data) +{ + // From an iframe, window.parent == parent window + // So if we don't have a window.parent, we're certainly not an iframe + if(window.parent != null) + { + // If we don't have this element in the parent window, this is not an auth iframe + if(window.parent.document.getElementById('jsopenid_ifrm') != null) + { + window.parent.postMessage({"success": success, + "data": data}, + targetOrigin); + } + } +} + +function tryBackgroundLogin(login_url, callback_success, callback_failed) +{ + if(window.parent != null) + { + // Check if we are called recursively (from within a login attempt) + if(window.parent.document.getElementById('jsopenid_ifrm') != null) + { + return; + } + } + + // Create the iframe we are going to use + ifrm = document.createElement('iframe'); + ifrm.id = 'jsopenid_ifrm'; + ifrm.src = login_url; + ifrm.style.width = 0; + ifrm.style.height = 0; + ifrm.style.visibility = "hidden"; + + // Set up for pingbacks + window.addEventListener('message', function(event) + { + // We don't check don't check event.origin, as it wouldn't add anything worthwhile + // This would prevent a rogue website from saying "The user is now logged in", but we should *never* trust this anyway + // This whole library is only for user convenience + if(event.source != ifrm.contentWindow) + { + // Ignoring response from someone unexpected + return; + } + document.body.removeChild(ifrm); + if(event.data["success"]) + { + callback_success(event.data["data"]); + } + else + { + if(callback_failed != null) + { + callback_failed(event.data["data"]); + } + } + }, false); + + // HIT IT! + document.body.appendChild(ifrm); +} diff --git a/roles/apps-fp-o/handlers/main.yml b/roles/apps-fp-o/handlers/main.yml new file mode 100644 index 0000000000..0b2c80f86a --- /dev/null +++ b/roles/apps-fp-o/handlers/main.yml @@ -0,0 +1,5 @@ +- name: rebuild apps-fp-o html + shell: /usr/bin/apps-fp-o-yaml2html.py > /srv/web/apps-fp-o/apps-yaml.html + +- name: rebuild apps-fp-o json + shell: /usr/bin/apps-fp-o-yaml2json.py > /srv/web/apps-fp-o/js/data.js diff --git a/roles/apps-fp-o/tasks/main.yml b/roles/apps-fp-o/tasks/main.yml new file mode 100644 index 0000000000..2ffea19ef4 --- /dev/null +++ b/roles/apps-fp-o/tasks/main.yml @@ -0,0 +1,48 @@ +define apps-fp-o::proxy( + $website, + $path +) { + include httpd::base + +- name: Install that apps-fp-o rpm package + yum: name=apps-fp-o state=present + tags: + - apps-fp-o + +- name: Copy in the proxy config + template: > + src=apps.fp.o.conf dest=/etc/httpd/conf.d/{{website}}/apps.fp.o.conf + owner=root group=root mode=0644 + notify: + - restart httpd + tags: + - apps-fp-o + +- name: Copy in some global assets used around our apps + synchronize: > + src=global/ dest=/srv/web/apps-fp-o/global/ + tags: + - apps-fp-o + +- name: Copy in our app data yaml + template: > + src=apps.yaml dest=/usr/share/apps-fp-o/apps.yaml + owner=root group=root mode=0644 + notify: + - rebuild apps-fp-o html + - rebuild apps-fp-o json + - restart httpd + tags: + - apps-fp-o + + # run commands on file change + exec { "/usr/bin/apps-fp-o-yaml2html.py > /srv/web/apps-fp-o/apps-yaml.html": + subscribe => File["/usr/share/apps-fp-o/apps.yaml"], + refreshonly => true + } + exec { "/usr/bin/apps-fp-o-yaml2json.py > /srv/web/apps-fp-o/js/data.js": + subscribe => File["/usr/share/apps-fp-o/apps.yaml"], + refreshonly => true + } + +} diff --git a/roles/apps-fp-o/templates/apps.fp.o-proxy.conf.erb b/roles/apps-fp-o/templates/apps.fp.o-proxy.conf.erb new file mode 100644 index 0000000000..6fcdff095d --- /dev/null +++ b/roles/apps-fp-o/templates/apps.fp.o-proxy.conf.erb @@ -0,0 +1 @@ +DocumentRoot /srv/web/apps-fp-o/