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/