Add Ipsilon role and config
Signed-off-by: Patrick Uiterwijk <puiterwijk@redhat.com>
This commit is contained in:
parent
94a9deb8dc
commit
86338b0703
14 changed files with 350 additions and 0 deletions
7
roles/ipsilon/files/templates/index.html
Normal file
7
roles/ipsilon/files/templates/index.html
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{% extends "layout.html" %}
|
||||||
|
{% block toptext %}
|
||||||
|
This is the Federated Open Authentication provider homepage.
|
||||||
|
{% endblock %}
|
||||||
|
{% block main %}
|
||||||
|
You will be redirected to this application whenever another application requires you to authenticate.
|
||||||
|
{% endblock %}
|
15
roles/ipsilon/files/templates/internalerror.html
Normal file
15
roles/ipsilon/files/templates/internalerror.html
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{% extends "layout.html" %}
|
||||||
|
{% block toptext %}
|
||||||
|
500 - Internal Server Error
|
||||||
|
{% endblock %}
|
||||||
|
{% block main %}
|
||||||
|
{% if message: %}
|
||||||
|
<p>{{ message }}</p>
|
||||||
|
{% else %}
|
||||||
|
<p>Ipsilon encountered an unexpected internal error while trying to
|
||||||
|
fulfill your request.</p>
|
||||||
|
{% endif %}
|
||||||
|
<p>Please retry again.</p>
|
||||||
|
<p>If the error persists, contact the server administrator to resolve
|
||||||
|
the problem.</p>
|
||||||
|
{% endblock %}
|
35
roles/ipsilon/files/templates/layout.html
Normal file
35
roles/ipsilon/files/templates/layout.html
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>{{ title }}</title>
|
||||||
|
|
||||||
|
<link rel="shortcut icon" type="image/vnd.microsoft.icon"
|
||||||
|
href="//fedoraproject.org/static/images/favicon.ico"/>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="{{ basepath }}/ui/fedora/fedora.css">
|
||||||
|
|
||||||
|
<meta name="generator" content="Ipsilon">
|
||||||
|
|
||||||
|
{%- if heads %}
|
||||||
|
{%- for group, value in heads.items() %}
|
||||||
|
{%- for head in value %}
|
||||||
|
{{ head }}
|
||||||
|
{%- endfor %}
|
||||||
|
{%- endfor %}
|
||||||
|
{%- endif %}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="header_bg">
|
||||||
|
<div class="body header">
|
||||||
|
<img id="logo" alt="logo" src="{{ basepath }}/ui/fedora/fedora-authn-logo-white.png"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="body main">
|
||||||
|
<p id="toptext">{% block toptext %}{% endblock %}</p>
|
||||||
|
<div class="middlebox">
|
||||||
|
{% block main %}{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
13
roles/ipsilon/files/templates/logout.html
Normal file
13
roles/ipsilon/files/templates/logout.html
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{% extends "master.html" %}
|
||||||
|
{% block toptext %}
|
||||||
|
Logged out
|
||||||
|
{% endblock %}
|
||||||
|
{% block main %}
|
||||||
|
{% if user.name %}
|
||||||
|
<p>Something prevented a successful logout</p>
|
||||||
|
<p>You are still logged in as {{ user.fullname }}</p>
|
||||||
|
{% else %}
|
||||||
|
<p>Successfully logged out.</p>
|
||||||
|
<p>Return to <a href="{{ basepath }}/">Home</a> page</p>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
13
roles/ipsilon/files/templates/notfound.html
Normal file
13
roles/ipsilon/files/templates/notfound.html
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{% extends "layout.html" %}
|
||||||
|
{% block toptext %}
|
||||||
|
404 - Not Found
|
||||||
|
{% endblock %}
|
||||||
|
{% block main %}
|
||||||
|
{% if message: %}
|
||||||
|
<p>{{ message }}</p>
|
||||||
|
{% else %}
|
||||||
|
<p>This page does not exist.</p>
|
||||||
|
{% endif %}
|
||||||
|
<p>If you think this is an error, contact the server administrator to resolve
|
||||||
|
the problem.</p>
|
||||||
|
{% endblock %}
|
36
roles/ipsilon/files/templates/openid/consent_form.html
Normal file
36
roles/ipsilon/files/templates/openid/consent_form.html
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
{% extends "layout.html" %}
|
||||||
|
{% block toptext %}
|
||||||
|
{{trustroot}} is asking to authenticate via OpenID using FedOAuth
|
||||||
|
{% endblock %}
|
||||||
|
{% block main %}
|
||||||
|
Review the authorization details
|
||||||
|
<div>
|
||||||
|
<form method="post" action="{{action}}" enctype="application/x-www-form-urlencoded">
|
||||||
|
<input type="hidden" name="ipsilon_transaction_id" id="ipsilon_transaction_id" value="{{ ipsilon_transaction_id }}" />
|
||||||
|
<p class="form_item">
|
||||||
|
<table class="details">
|
||||||
|
{% for entry in authz_details|dictsort %}
|
||||||
|
<tr>
|
||||||
|
<td>{{entry[0]}}</td>
|
||||||
|
<td>{{entry[1]}}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Remember approval for</td>
|
||||||
|
<td><select name="remember_for_days">
|
||||||
|
<option value="0">never</option>
|
||||||
|
<option value="3">3 days</option>
|
||||||
|
<option value="7">7 days</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</p>
|
||||||
|
<p class="form_item">
|
||||||
|
<input type="submit" name="decided_deny" value="Reject">
|
||||||
|
<input type="submit" name="decided_allow" value="Allow">
|
||||||
|
</p>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
7
roles/ipsilon/files/templates/openid/userpage.html
Normal file
7
roles/ipsilon/files/templates/openid/userpage.html
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{% extends "layout.html" %}
|
||||||
|
{% block toptext %}
|
||||||
|
This is the OpenID page for {{username}}.
|
||||||
|
{% endblock %}
|
||||||
|
{% block main %}
|
||||||
|
This page is primarily used internally
|
||||||
|
{% endblock %}
|
16
roles/ipsilon/files/templates/openid/xrds.xml
Normal file
16
roles/ipsilon/files/templates/openid/xrds.xml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">
|
||||||
|
<XRD>
|
||||||
|
<Service>
|
||||||
|
{%- for t in types %}
|
||||||
|
<Type>{{ t }}</Type>
|
||||||
|
{%- endfor %}
|
||||||
|
{%- if uri %}
|
||||||
|
<URI>{{ uri }}</URI>
|
||||||
|
{%- endif %}
|
||||||
|
{%- if localid %}
|
||||||
|
<LocalID>{{ localid }}</LocalID>
|
||||||
|
{%- endif %}
|
||||||
|
</Service>
|
||||||
|
</XRD>
|
||||||
|
</xrds:XRDS>
|
59
roles/ipsilon/files/templates/persona/provisioning.html
Normal file
59
roles/ipsilon/files/templates/persona/provisioning.html
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
{% extends "layout.html" %}
|
||||||
|
{% block toptext %}
|
||||||
|
This page is used internally
|
||||||
|
{% endblock %}
|
||||||
|
{% block main %}
|
||||||
|
<script type="text/javascript" src="https://login.persona.org/provisioning_api.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
var xmlhttp = new XMLHttpRequest()
|
||||||
|
|
||||||
|
var loggedin = {{ loggedin|lower }};
|
||||||
|
|
||||||
|
xmlhttp.onreadystatechange = function()
|
||||||
|
{
|
||||||
|
if(xmlhttp.readyState == 4)
|
||||||
|
{
|
||||||
|
if(xmlhttp.status == 200)
|
||||||
|
{
|
||||||
|
navigator.id.registerCertificate(xmlhttp.responseText);
|
||||||
|
}
|
||||||
|
else if((xmlhttp.status == 401) || (xmlhttp.status == 403))
|
||||||
|
{
|
||||||
|
navigator.id.raiseProvisioningFailure('Error in provisioning!');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alert("Response code: " + xmlhttp.status);
|
||||||
|
alert("Response text: " + xmlhttp.responseText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateServerSide(email, publicKey, certDuration, callback)
|
||||||
|
{
|
||||||
|
xmlhttp.open("POST", "Sign/", true);
|
||||||
|
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||||
|
xmlhttp.send("email=" + encodeURIComponent(email)
|
||||||
|
+ "&publicKey=" + encodeURIComponent(publicKey)
|
||||||
|
+ "&certDuration=" + encodeURIComponent(certDuration));
|
||||||
|
}
|
||||||
|
|
||||||
|
function startProvisioning()
|
||||||
|
{
|
||||||
|
navigator.id.beginProvisioning(function(email, certDuration)
|
||||||
|
{
|
||||||
|
if(loggedin)
|
||||||
|
{
|
||||||
|
navigator.id.genKeyPair(function(publicKey)
|
||||||
|
{
|
||||||
|
generateServerSide(email, publicKey, certDuration);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
navigator.id.raiseProvisioningFailure('user is not authenticated');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
startProvisioning();
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
19
roles/ipsilon/files/templates/persona/signin_result.html
Normal file
19
roles/ipsilon/files/templates/persona/signin_result.html
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{% extends "layout.html" %}
|
||||||
|
{% block toptext %}
|
||||||
|
This page is used internally
|
||||||
|
{% endblock %}
|
||||||
|
{% block main %}
|
||||||
|
<script type="text/javascript" src="https://login.persona.org/authentication_api.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
var loggedin = {{ loggedin|lower }};
|
||||||
|
|
||||||
|
if(loggedin)
|
||||||
|
{
|
||||||
|
navigator.id.beginAuthentication(function(email) {
|
||||||
|
navigator.id.completeAuthentication();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
navigator.id.raiseAuthenticationFailure('User cancelled signon');
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
12
roles/ipsilon/files/templates/unauthorized.html
Normal file
12
roles/ipsilon/files/templates/unauthorized.html
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{% extends "layout.html" %}
|
||||||
|
{% block toptext %}
|
||||||
|
401 - Unauthorized
|
||||||
|
{% endblock %}
|
||||||
|
{% block main %}
|
||||||
|
{% if message: %}
|
||||||
|
<p>{{ message }}</p>
|
||||||
|
{% else %}
|
||||||
|
<p>Authentication was not succesful</p>
|
||||||
|
{% endif %}
|
||||||
|
<p><a href="{{ basepath }}/login" title="Login">Try to login again</a></p>
|
||||||
|
{% endblock %}
|
56
roles/ipsilon/tasks/main.yml
Normal file
56
roles/ipsilon/tasks/main.yml
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
---
|
||||||
|
# Configuration for the ipsilon webapp
|
||||||
|
|
||||||
|
- name: clean yum metadata
|
||||||
|
command: yum clean all
|
||||||
|
tags:
|
||||||
|
- packages
|
||||||
|
|
||||||
|
- name: install needed packages
|
||||||
|
yum: pkg={{ item }} state=present
|
||||||
|
with_items:
|
||||||
|
- ipsilon
|
||||||
|
- ipsilon-authfas
|
||||||
|
- ipsilon-openid
|
||||||
|
- ipsilon-persona
|
||||||
|
- python-psycopg2
|
||||||
|
- libsemanage-python
|
||||||
|
tags:
|
||||||
|
- packages
|
||||||
|
|
||||||
|
- name: copy ipsilon templates
|
||||||
|
copy: src=templates
|
||||||
|
dest=/usr/share/ipsilon/templates-fedora
|
||||||
|
owner=ipsilon group=ipsilon mode=0666
|
||||||
|
|
||||||
|
- name: copy ipsilon configuration
|
||||||
|
template: src={{ item }}.cfg
|
||||||
|
dest=/etc/ipsilon/{{ item }}.cfg
|
||||||
|
owner=ipsilon group=ipsilon mode=0600
|
||||||
|
with_items:
|
||||||
|
- ipsilon
|
||||||
|
- configuration
|
||||||
|
tags:
|
||||||
|
- config
|
||||||
|
notify:
|
||||||
|
- restart apache
|
||||||
|
|
||||||
|
- name: copy persona private key
|
||||||
|
copy: src={{ private }}/files/ipsilon/persona.key dest=/etc/ipsilon/persona.key
|
||||||
|
owner=ipsilon group=ipsilon mode=0600
|
||||||
|
when: env != "staging"
|
||||||
|
|
||||||
|
- name: copy persona STG private key
|
||||||
|
copy: src={{ private }}/files/ipsilon/persona.stg.key dest=/etc/ipsilon/persona.stg.key
|
||||||
|
owner=ipsilon group=ipsilon mode=0600
|
||||||
|
when: env == "staging"
|
||||||
|
|
||||||
|
- name: set sebooleans so ipsilon can talk to the db
|
||||||
|
action: seboolean name=httpd_can_network_connect_db
|
||||||
|
state=true
|
||||||
|
persistent=true
|
||||||
|
|
||||||
|
- name: apply selinux type to the wsgi file
|
||||||
|
file: >
|
||||||
|
dest=/usr/sbin/ipsilon
|
||||||
|
setype=httpd_sys_content_t
|
40
roles/ipsilon/templates/configuration.cfg
Normal file
40
roles/ipsilon/templates/configuration.cfg
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
[login_config]
|
||||||
|
global enabled=fas
|
||||||
|
{% if env == 'staging' %}
|
||||||
|
fas FAS url=https://admin.stg.fedoraproject.org/accounts/
|
||||||
|
{% else %}
|
||||||
|
fas FAS url=https://admin.fedoraproject.org/accounts/
|
||||||
|
{% endif %}
|
||||||
|
fas FAS Proxy client user Agent=Fedora Ipsilon
|
||||||
|
fas FAS Insecure Auth=False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[provider_config]
|
||||||
|
global enabled=persona,openid
|
||||||
|
|
||||||
|
{% if env == 'staging' %}
|
||||||
|
persona allowed domains=stg.fedoraproject.org
|
||||||
|
persona issuer domain=id.stg.fedoraproject.org
|
||||||
|
persona idp key file=/etc/fedoauth/persona.stg.key
|
||||||
|
{% else %}
|
||||||
|
persona allowed domains=fedoraproject.org
|
||||||
|
persona issuer domain=id.fedoraproject.org
|
||||||
|
persona idp key file=/etc/fedoauth/persona.key
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if env == 'staging' %}
|
||||||
|
openid database url="postgresql://{{ fedoauth_db_user }}:{{ fedoauth_db_pass }}@{{ fedoauth_db_host }}.stg/{{ fedoauth_db_name }}"
|
||||||
|
openid endpoint url=https://id.stg.fedoraproject.org/openid/
|
||||||
|
openid identity url template=http://localhost/openid/id/%(username)s/
|
||||||
|
openid trusted roots=
|
||||||
|
{% else %}
|
||||||
|
openid database url="postgresql://{{ fedoauth_db_user }}:{{ fedoauth_db_pass }}@{{ fedoauth_db_host }}/{{ fedoauth_db_name }}"
|
||||||
|
openid endpoint url=https://id.fedoraproject.org/openid/
|
||||||
|
openid identity url template=http://%(username)s.id.fedoraproject.org/
|
||||||
|
openid trusted roots=http://jenkins.cloud.fedoraproject.org/securityRealm/finishLogin,https://ask.fedoraproject.org/,https://fedorahosted.org/,https://badges.fedoraproject.org,https://apps.fedoraproject.org/tagger/,https://apps.fedoraproject.org/nuancier/,https://apps.fedoraproject.org/datagrepper/,https://apps.fedoraproject.org/calendar/,http://apps.fedoraproject.org/notifications/,http://copr.fedoraproject.org/,http://copr-fe.cloud.fedoraproject.org/,https://admin.fedoraproject.org/pkgdb/,https://admin.fedoraproject.org/voting/,https://apps.fedoraproject.org/github2fedmsg,https://admin.fedoraproject.org,https://apps.fedoraproject.org/,https://release-monitoring.org/
|
||||||
|
{% endif %}
|
||||||
|
openid untrusted roots=
|
||||||
|
openid enabled extensions=Teams,Attribute Exchange,CLAs,Simple Registration
|
||||||
|
|
22
roles/ipsilon/templates/ipsilon.cfg
Normal file
22
roles/ipsilon/templates/ipsilon.cfg
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
[global]
|
||||||
|
debug = False
|
||||||
|
tools.log_request_response.on = False
|
||||||
|
template_dir = "/srv/ipsilon/templates"
|
||||||
|
|
||||||
|
log.screen = False
|
||||||
|
base.mount = ""
|
||||||
|
base.dir = "/usr/share/ipsilon"
|
||||||
|
admin.config.db = "configfile:///etc/ipsilon/configuration.cfg"
|
||||||
|
user.prefs.db = "configfile:///etc/ipsilon/configuration.cfg"
|
||||||
|
{% if env == 'staging' %}
|
||||||
|
transactions.db = "postgresql://{{ fedoauth_db_user }}:{{ fedoauth_db_pass }}@{{ fedoauth_db_host }}.stg/{{ fedoauth_db_name }}"
|
||||||
|
{% else %}
|
||||||
|
transactions.db = "postgresql://{{ fedoauth_db_user }}:{{ fedoauth_db_pass }}@{{ fedoauth_db_host }}/{{ fedoauth_db_name }}"
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
tools.sessions.on = True
|
||||||
|
tools.sessions.name = "fedora_ipsilon_session_id"
|
||||||
|
tools.sessions.storage_type = "Sql"
|
||||||
|
tools.sessions.timeout = 60
|
||||||
|
tools.sessions.httponly = True
|
||||||
|
tools.sessions.secure = True
|
Loading…
Add table
Add a link
Reference in a new issue