diff --git a/helios_auth/auth_systems/pirateid.py b/helios_auth/auth_systems/pirateid.py index dade34dbba54794f0f2b2ddd3f497cd8f0f7750b..1f6352de1fc71a5790273d8da6faf02af2f80916 100644 --- a/helios_auth/auth_systems/pirateid.py +++ b/helios_auth/auth_systems/pirateid.py @@ -11,6 +11,10 @@ import sys, os, cgi, urllib, urllib2, re from xml.etree import ElementTree from openid import view_helpers +import json +import urllib2 +import logging + # some parameters to indicate that status updating is not possible STATUS_UPDATES = False @@ -19,15 +23,24 @@ STATUS_UPDATES = False LOGIN_MESSAGE = "Log in with my PirateID" OPENID_ENDPOINT = 'https://openid.pirati.cz' +AX_REQUIRED_FIELDS = { + 'firstname' : 'http://axschema.org/namePerson/first', + 'lastname' : 'http://axschema.org/namePerson/last', + 'fullname' : 'http://axschema.org/namePerson', + 'email' : 'http://axschema.org/contact/email', + 'nickname' : 'http://axschema.org/namePerson/friendly' +} + + def get_auth_url(request, redirect_url): request.session['pirateid_redirect_url'] = redirect_url - url = view_helpers.start_openid(request.session, OPENID_ENDPOINT, redirect_url, redirect_url) + url = view_helpers.start_openid(request.session, OPENID_ENDPOINT, redirect_url, redirect_url, ax_required_fields = AX_REQUIRED_FIELDS) return url def get_user_info_after_auth(request): - data = view_helpers.finish_openid(request.session, request.GET, request.session['pirateid_redirect_url']) + data = view_helpers.finish_openid(request.session, request.GET, request.session['pirateid_redirect_url'], ax_required_fields = AX_REQUIRED_FIELDS) - return {'type' : 'pirateid', 'user_id': data['ax']['email'][0], 'name': data['ax']['fullname'][0], 'info': {'email': data['ax']['email'][0]}, 'token':{}} + return {'type' : 'pirateid', 'user_id': data['ax']['nickname'][0], 'name': data['ax']['fullname'][0], 'info': {'email': data['ax']['email'][0]}, 'token':{}} def do_logout(user): """ @@ -47,9 +60,38 @@ def send_message(user_id, user_name, user_info, subject, body): """ send_mail(subject, body, settings.SERVER_EMAIL, ["%s <%s>" % (user_name, user_id)], fail_silently=False) -def check_constraint(constraint, user_info): +def generate_constraint(category_id, user): + return category_id + +def eligibility_category_id(constraint): + return constraint +import pprint +pp = pprint.PrettyPrinter(indent=4) +def check_constraint(constraint, user): """ for eligibility """ - pass + userinfo = json.load(urllib2.urlopen("https://graph.pirati.cz/user/" + user.user_id)) + id = userinfo[u'id'] + usergroups = json.load(urllib2.urlopen("https://graph.pirati.cz/" + id + "/groups")) + for usergroup in usergroups: + if usergroup[u'id'] == constraint: + return True + return False +def can_list_categories(): + """ + we will use phpbb groups + """ + return True + +def list_categories(user): + """ + returns [{id,name},...] + """ + categories = [] + groups = json.load(urllib2.urlopen("https://graph.pirati.cz/groups")) + for group in groups: + categories.append({'id': group[u'id'], 'name': group[u'username']}) + + return categories