~ubuntu-branches/ubuntu/natty/moin/natty-updates

« back to all changes in this revision

Viewing changes to MoinMoin/auth/openidrp_ext/openidrp_sreg.py

  • Committer: Bazaar Package Importer
  • Author(s): Jonas Smedegaard
  • Date: 2008-06-22 21:17:13 UTC
  • mto: This revision was merged to the branch mainline in revision 18.
  • Revision ID: james.westby@ubuntu.com-20080622211713-inlv5k4eifxckelr
ImportĀ upstreamĀ versionĀ 1.7.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# -*- coding: iso-8859-1 -*-
2
 
"""
3
 
    MoinMoin - Simple Registration Extension for OpenID authorization
4
 
 
5
 
    @copyright: 2009 Canonical, Inc.
6
 
    @license: GNU GPL, see COPYING for details.
7
 
"""
8
 
#from MoinMoin.util.moinoid import MoinOpenIDStore
9
 
from MoinMoin import user
10
 
from MoinMoin.auth import BaseAuth
11
 
from MoinMoin.auth.openidrp import OpenIDAuth
12
 
#from openid.consumer import consumer
13
 
#from openid.yadis.discover import DiscoveryFailure
14
 
#from openid.fetchers import HTTPFetchingError
15
 
#from MoinMoin.widget import html
16
 
#from MoinMoin.auth import CancelLogin, ContinueLogin
17
 
#from MoinMoin.auth import MultistageFormLogin, MultistageRedirectLogin
18
 
#from MoinMoin.auth import get_multistage_continuation_url
19
 
 
20
 
from openid.extensions.sreg import *
21
 
from MoinMoin import i18n
22
 
from datetime import datetime, timedelta
23
 
from pytz import timezone
24
 
import pytz
25
 
 
26
 
OpenIDAuth.auth_attribs = ('name', 'email', 'aliasname', 'language', 'tz_offset')
27
 
 
28
 
openidrp_sreg_required = ['nickname', 'email', 'timezone']
29
 
openidrp_sreg_optional = ['fullname', 'language']
30
 
openidrp_sreg_username_field = 'nickname'
31
 
 
32
 
def openidrp_sreg_modify_request(oidreq, cfg):
33
 
    oidreq.addExtension(SRegRequest(required=cfg.openidrp_sreg_required,
34
 
                                    optional=cfg.openidrp_sreg_optional))
35
 
 
36
 
def openidrp_sreg_create_user(info, u, cfg):
37
 
    sreg = _openidrp_sreg_extract_values(info)
38
 
    if sreg and sreg[cfg.openidrp_sreg_username_field] != '':
39
 
        u.name = sreg[cfg.openidrp_sreg_username_field]
40
 
    return u
41
 
 
42
 
def openidrp_sreg_update_user(info, u, cfg):
43
 
    sreg = _openidrp_sreg_extract_values(info)
44
 
    if sreg:
45
 
        u.name = sreg[cfg.openidrp_sreg_username_field]
46
 
        if sreg['email'] != '':
47
 
            u.email = sreg['email']
48
 
        if sreg['language'] != '':
49
 
            u.language = sreg['language']
50
 
        if sreg['timezone'] != '':
51
 
            u.tz_offset = sreg['timezone']
52
 
        if sreg['fullname'] != '':
53
 
            u.fullname = sreg['fullname']
54
 
 
55
 
def _openidrp_sreg_extract_values(info):
56
 
    # Pull SREG data here instead of asking user
57
 
    sreg_resp = SRegResponse.fromSuccessResponse(info)
58
 
    sreg = {'nickname': '', 'email': '', 'fullname': '',
59
 
            'dob': '0000-00-00', 'gender': '', 'postcode': '',
60
 
            'country': '', 'language': '', 'timezone': ''}
61
 
    if sreg_resp:
62
 
        if sreg_resp.get('nickname'):
63
 
            sreg['nickname'] = sreg_resp.get('nickname')
64
 
        if sreg_resp.get('fullname'):
65
 
            sreg['fullname'] = sreg_resp.get('fullname')
66
 
        if sreg_resp.get('email'):
67
 
            sreg['email'] = sreg_resp.get('email')
68
 
        # Language must be a valid value
69
 
        # check the MoinMoin list, or restrict to first 2 chars
70
 
        if sreg_resp.get('language'):
71
 
            # convert unknown codes to 2 char format
72
 
            langs = i18n.wikiLanguages().items()
73
 
            sreg['language'] = sreg_resp.get('language')
74
 
            lang_found = False
75
 
            for lang in langs:
76
 
                if lang[0] == sreg['language']:
77
 
                    lang_found = True
78
 
            if not lang_found:
79
 
                if langs[sreg['language'][0:2]]:
80
 
                    sreg['language'] = sreg['language'][0:2]
81
 
        # Timezone must be converted to offset in seconds
82
 
        if sreg_resp.get('timezone'):
83
 
            try:
84
 
                user_tz = timezone(sreg_resp.get('timezone').encode('ascii'))
85
 
            except pytz.UnknownTimeZoneError:
86
 
                pass # don't use
87
 
            else:
88
 
                if user_tz:
89
 
                    user_utcoffset = user_tz.utcoffset(datetime.utcnow())
90
 
                    sreg['timezone'] = user_utcoffset.days * 24 * 60 * 60 + user_utcoffset.seconds
91
 
                else:
92
 
                    # XXX when does user_tz get falsy? if it does, shouldn't we just 'pass'?
93
 
                    sreg['timezone'] = 0
94
 
    return sreg
95