annotate MoinMoin/user.py @ 3808:8c5fbc62dd1d

user storage: hash stored passwords, upgrade on use, remove charset magic
author Johannes Berg <johannes AT sipsolutions DOT net>
date Mon, 30 Jun 2008 21:41:04 +0200
parents cfbb31fbd6b7
children 88bec029f481
rev   line source
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
1 # -*- coding: iso-8859-1 -*-
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
2 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
3 MoinMoin - User Accounts
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
4
1909
be140a589f11 improved some module docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1868
diff changeset
5 This module contains functions to access user accounts (list all users, get
be140a589f11 improved some module docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1868
diff changeset
6 some specific user). User instances are used to access the user profile of
be140a589f11 improved some module docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1868
diff changeset
7 some specific user (name, password, email, bookmark, trail, settings, ...).
be140a589f11 improved some module docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1868
diff changeset
8
3333
928a45b60bb3 remove remaining mentions of "UserPreferences", add to CHANGES
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3175
diff changeset
9 Some related code is in the userform and userprefs modules.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
10
1963
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
11 TODO:
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
12 * code is a mixture of highlevel user stuff and lowlevel storage functions,
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
13 this has to get separated into:
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
14 * user object highlevel stuff
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
15 * storage code
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
16
1918
bb2e053067fb fixing copyright headers: remove umlauts (encoding troubles), make epydoc compatible, reformat
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1909
diff changeset
17 @copyright: 2000-2004 Juergen Hermann <jh@web.de>,
bb2e053067fb fixing copyright headers: remove umlauts (encoding troubles), make epydoc compatible, reformat
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1909
diff changeset
18 2003-2007 MoinMoin:ThomasWaldmann
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
19 @license: GNU GPL, see COPYING for details.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
20 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
21
1075
2ecd1e6c084d Fixed security issues in MoinMoin.user (do not reveal the ID), added variable hiding to cgitb.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents: 1005
diff changeset
22 # add names here to hide them in the cgitb traceback
3567
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
23 unsafe_names = ("id", "key", "val", "user_data", "enc_password", "recoverpass_key")
1075
2ecd1e6c084d Fixed security issues in MoinMoin.user (do not reveal the ID), added variable hiding to cgitb.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents: 1005
diff changeset
24
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
25 import os, time, sha, codecs, hmac, base64
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
26
2493
f3e3ffa68a7f Send UserCreatedEvent from user.save(), not the newaccount action.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2429
diff changeset
27 from MoinMoin import config, caching, wikiutil, i18n, events
3564
474f6ad01900 recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3333
diff changeset
28 from MoinMoin.util import timefuncs, filesys, random_string
474f6ad01900 recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3333
diff changeset
29 from MoinMoin.wikiutil import url_quote_plus
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
30
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
31
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
32 def getUserList(request):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
33 """ Get a list of all (numerical) user IDs.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
34
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
35 @param request: current request
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
36 @rtype: list
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
37 @return: all user IDs
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
38 """
1801
3369445b4aa8 move the dircache stuff to MoinMoin.util.filesys and disable it on win32
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1791
diff changeset
39 import re
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
40 user_re = re.compile(r'^\d+\.\d+(\.\d+)?$')
1801
3369445b4aa8 move the dircache stuff to MoinMoin.util.filesys and disable it on win32
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1791
diff changeset
41 files = filesys.dclistdir(request.cfg.user_dir)
232
31c1fbb101a3 remove string/Cookie import, rewrite filter/map
Thomas Waldmann <tw@waldmann-edv.de>
parents: 138
diff changeset
42 userlist = [f for f in files if user_re.match(f)]
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
43 return userlist
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
44
2092
937da10cb5b3 s/filter/filter_func/ to avoid conflict with builtin name
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2091
diff changeset
45 def get_by_filter(request, filter_func):
937da10cb5b3 s/filter/filter_func/ to avoid conflict with builtin name
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2091
diff changeset
46 """ Searches for an user with a given filter function """
2091
7af58454aafa Send an event when user changes her jabber id, force jid to be unique.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2090
diff changeset
47 for uid in getUserList(request):
2090
9fec7760489e Add a get_by_jabber_id function to search for users given their jabber id.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2065
diff changeset
48 theuser = User(request, uid)
2092
937da10cb5b3 s/filter/filter_func/ to avoid conflict with builtin name
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2091
diff changeset
49 if filter_func(theuser):
2090
9fec7760489e Add a get_by_jabber_id function to search for users given their jabber id.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2065
diff changeset
50 return theuser
9fec7760489e Add a get_by_jabber_id function to search for users given their jabber id.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2065
diff changeset
51
690
e8ccec07515b Refactored user search by mail address.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents: 626
diff changeset
52 def get_by_email_address(request, email_address):
2090
9fec7760489e Add a get_by_jabber_id function to search for users given their jabber id.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2065
diff changeset
53 """ Searches for an user with a particular e-mail address and returns it. """
2092
937da10cb5b3 s/filter/filter_func/ to avoid conflict with builtin name
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2091
diff changeset
54 filter_func = lambda user: user.valid and user.email.lower() == email_address.lower()
937da10cb5b3 s/filter/filter_func/ to avoid conflict with builtin name
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2091
diff changeset
55 return get_by_filter(request, filter_func)
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
56
2090
9fec7760489e Add a get_by_jabber_id function to search for users given their jabber id.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2065
diff changeset
57 def get_by_jabber_id(request, jabber_id):
9fec7760489e Add a get_by_jabber_id function to search for users given their jabber id.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2065
diff changeset
58 """ Searches for an user with a perticular jabber id and returns it. """
2092
937da10cb5b3 s/filter/filter_func/ to avoid conflict with builtin name
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2091
diff changeset
59 filter_func = lambda user: user.valid and user.jid.lower() == jabber_id.lower()
937da10cb5b3 s/filter/filter_func/ to avoid conflict with builtin name
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2091
diff changeset
60 return get_by_filter(request, filter_func)
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
61
2011
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
62 def _getUserIdByKey(request, key, search):
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
63 """ Get the user ID for a specified key/value pair.
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
64
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
65 This method must only be called for keys that are
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
66 guaranteed to be unique.
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
67
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
68 @param key: the key to look in
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
69 @param search: the value to look for
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
70 @return the corresponding user ID or None
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
71 """
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
72 if not search or not key:
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
73 return None
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
74 cfg = request.cfg
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
75 cachekey = '%s2id' % key
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
76 try:
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
77 _key2id = getattr(cfg.cache, cachekey)
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
78 except AttributeError:
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
79 arena = 'user'
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
80 cache = caching.CacheEntry(request, arena, cachekey, scope='wiki', use_pickle=True)
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
81 try:
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
82 _key2id = cache.content()
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
83 except caching.CacheError:
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
84 _key2id = {}
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
85 setattr(cfg.cache, cachekey, _key2id)
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
86 uid = _key2id.get(search, None)
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
87 if uid is None:
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
88 for userid in getUserList(request):
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
89 u = User(request, id=userid)
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
90 if hasattr(u, key):
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
91 value = getattr(u, key)
2299
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
92 if isinstance(value, list):
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
93 for val in value:
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
94 _key2id[val] = userid
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
95 else:
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
96 _key2id[value] = userid
2011
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
97 arena = 'user'
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
98 cache = caching.CacheEntry(request, arena, cachekey, scope='wiki', use_pickle=True)
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
99 try:
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
100 cache.update(_key2id)
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
101 except caching.CacheError:
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
102 pass
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
103 uid = _key2id.get(search, None)
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
104 return uid
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
105
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
106
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
107 def getUserId(request, searchName):
1963
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
108 """ Get the user ID for a specific user NAME.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
109
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
110 @param searchName: the user name to look up
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
111 @rtype: string
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
112 @return: the corresponding user ID or None
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
113 """
2011
6cd0e4cc8e18 refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2010
diff changeset
114 return _getUserIdByKey(request, 'name', searchName)
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
115
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
116
2299
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
117 def getUserIdByOpenId(request, openid):
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
118 """ Get the user ID for a specific OpenID.
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
119
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
120 @param openid: the openid to look up
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
121 @rtype: string
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
122 @return: the corresponding user ID or None
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
123 """
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
124 return _getUserIdByKey(request, 'openids', openid)
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
125
39d11cf4af6c OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2286
diff changeset
126
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
127 def getUserIdentification(request, username=None):
1963
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
128 """ Return user name or IP or '<unknown>' indicator.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
129
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
130 @param request: the request object
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
131 @param username: (optional) user name
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
132 @rtype: string
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
133 @return: user name or IP or unknown indicator
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
134 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
135 _ = request.getText
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
136
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
137 if username is None:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
138 username = request.user.name
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
139
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
140 return username or (request.cfg.show_hosts and request.remote_addr) or _("<unknown>")
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
141
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
142
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
143 def encodePassword(pwd):
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
144 """ Encode a cleartext password
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
145
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
146 @param pwd: the cleartext password, (unicode)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
147 @param charset: charset used to encode password, used only for
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
148 compatibility with old passwords generated on moin-1.2.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
149 @rtype: string
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
150 @return: the password in apache htpasswd compatible SHA-encoding,
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
151 or None
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
152 """
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
153 pwd = pwd.encode('utf-8')
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
154
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
155 salt = random_string(20)
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
156 hash = sha.new(pwd)
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
157 hash.update(salt)
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
158
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
159 return '{SSHA}' + base64.b64encode(hash.digest() + salt).rstrip()
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
160
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
161
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
162 def normalizeName(name):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
163 """ Make normalized user name
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
164
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
165 Prevent impersonating another user with names containing leading,
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
166 trailing or multiple whitespace, or using invisible unicode
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
167 characters.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
168
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
169 Prevent creating user page as sub page, because '/' is not allowed
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
170 in user names.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
171
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
172 Prevent using ':' and ',' which are reserved by acl.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
173
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
174 @param name: user name, unicode
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
175 @rtype: unicode
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
176 @return: user name that can be used in acl lines
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
177 """
826
8e880418d736 remove all underscore <-> blank magic
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 750
diff changeset
178 username_allowedchars = "'@.-_" # ' for names like O'Brian or email addresses.
8e880418d736 remove all underscore <-> blank magic
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 750
diff changeset
179 # "," and ":" must not be allowed (ACL delimiters).
8e880418d736 remove all underscore <-> blank magic
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 750
diff changeset
180 # We also allow _ in usernames for nicer URLs.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
181 # Strip non alpha numeric characters (except username_allowedchars), keep white space
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
182 name = ''.join([c for c in name if c.isalnum() or c.isspace() or c in username_allowedchars])
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
183
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
184 # Normalize white space. Each name can contain multiple
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
185 # words separated with only one space.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
186 name = ' '.join(name.split())
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
187
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
188 return name
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
189
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
190
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
191 def isValidName(request, name):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
192 """ Validate user name
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
193
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
194 @param name: user name, unicode
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
195 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
196 normalized = normalizeName(name)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
197 return (name == normalized) and not wikiutil.isGroupPage(request, name)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
198
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
199
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
200 def encodeList(items):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
201 """ Encode list of items in user data file
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
202
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
203 Items are separated by '\t' characters.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
204
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
205 @param items: list unicode strings
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
206 @rtype: unicode
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
207 @return: list encoded as unicode
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
208 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
209 line = []
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
210 for item in items:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
211 item = item.strip()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
212 if not item:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
213 continue
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
214 line.append(item)
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
215
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
216 line = '\t'.join(line)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
217 return line
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
218
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
219 def decodeList(line):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
220 """ Decode list of items from user data file
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
221
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
222 @param line: line containing list of items, encoded with encodeList
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
223 @rtype: list of unicode strings
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
224 @return: list of items in encoded in line
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
225 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
226 items = []
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
227 for item in line.split('\t'):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
228 item = item.strip()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
229 if not item:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
230 continue
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
231 items.append(item)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
232 return items
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
233
1940
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
234 def encodeDict(items):
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
235 """ Encode dict of items in user data file
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
236
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
237 Items are separated by '\t' characters.
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
238 Each item is key:value.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
239
1940
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
240 @param items: dict of unicode:unicode
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
241 @rtype: unicode
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
242 @return: dict encoded as unicode
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
243 """
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
244 line = []
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
245 for key, value in items.items():
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
246 item = u'%s:%s' % (key, value)
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
247 line.append(item)
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
248 line = '\t'.join(line)
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
249 return line
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
250
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
251 def decodeDict(line):
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
252 """ Decode dict of key:value pairs from user data file
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
253
1940
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
254 @param line: line containing a dict, encoded with encodeDict
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
255 @rtype: dict
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
256 @return: dict unicode:unicode items
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
257 """
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
258 items = {}
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
259 for item in line.split('\t'):
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
260 item = item.strip()
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
261 if not item:
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
262 continue
1940
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
263 key, value = item.split(':', 1)
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
264 items[key] = value
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
265 return items
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
266
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
267
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
268 class User:
1963
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
269 """ A MoinMoin User """
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
270
265
2cbc7dc436d7 auth changes: added u.auth_method, u.auth_attribs and some debug code. Support for switching off some form fields.
Thomas Waldmann <tw@waldmann-edv.de>
parents: 244
diff changeset
271 def __init__(self, request, id=None, name="", password=None, auth_username="", **kw):
244
42f749b0d8bb fix empty username when using auth_username for autocreation
Thomas Waldmann <tw@waldmann-edv.de>
parents: 238
diff changeset
272 """ Initialize User object
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
273
1986
3475126f78c6 fix some builtin names used as attribute names
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1963
diff changeset
274 TODO: when this gets refactored, use "uid" not builtin "id"
3475126f78c6 fix some builtin names used as attribute names
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1963
diff changeset
275
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
276 @param request: the request object
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
277 @param id: (optional) user ID
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
278 @param name: (optional) user name
1606
ae56d79ae076 http auth / ssl clientcert auth: correctly decode name/password/email to unicode (ported from 1.5)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1597
diff changeset
279 @param password: (optional) user password (unicode)
265
2cbc7dc436d7 auth changes: added u.auth_method, u.auth_attribs and some debug code. Support for switching off some form fields.
Thomas Waldmann <tw@waldmann-edv.de>
parents: 244
diff changeset
280 @param auth_username: (optional) already authenticated user name
1606
ae56d79ae076 http auth / ssl clientcert auth: correctly decode name/password/email to unicode (ported from 1.5)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1597
diff changeset
281 (e.g. when using http basic auth) (unicode)
265
2cbc7dc436d7 auth changes: added u.auth_method, u.auth_attribs and some debug code. Support for switching off some form fields.
Thomas Waldmann <tw@waldmann-edv.de>
parents: 244
diff changeset
282 @keyword auth_method: method that was used for authentication,
2cbc7dc436d7 auth changes: added u.auth_method, u.auth_attribs and some debug code. Support for switching off some form fields.
Thomas Waldmann <tw@waldmann-edv.de>
parents: 244
diff changeset
283 default: 'internal'
2cbc7dc436d7 auth changes: added u.auth_method, u.auth_attribs and some debug code. Support for switching off some form fields.
Thomas Waldmann <tw@waldmann-edv.de>
parents: 244
diff changeset
284 @keyword auth_attribs: tuple of user object attribute names that are
2cbc7dc436d7 auth changes: added u.auth_method, u.auth_attribs and some debug code. Support for switching off some form fields.
Thomas Waldmann <tw@waldmann-edv.de>
parents: 244
diff changeset
285 determined by auth method and should not be
3333
928a45b60bb3 remove remaining mentions of "UserPreferences", add to CHANGES
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3175
diff changeset
286 changeable by preferences, default: ().
265
2cbc7dc436d7 auth changes: added u.auth_method, u.auth_attribs and some debug code. Support for switching off some form fields.
Thomas Waldmann <tw@waldmann-edv.de>
parents: 244
diff changeset
287 First tuple element was used for authentication.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
288 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
289 self._cfg = request.cfg
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
290 self.valid = 0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
291 self.id = id
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
292 self.auth_username = auth_username
265
2cbc7dc436d7 auth changes: added u.auth_method, u.auth_attribs and some debug code. Support for switching off some form fields.
Thomas Waldmann <tw@waldmann-edv.de>
parents: 244
diff changeset
293 self.auth_method = kw.get('auth_method', 'internal')
2cbc7dc436d7 auth changes: added u.auth_method, u.auth_attribs and some debug code. Support for switching off some form fields.
Thomas Waldmann <tw@waldmann-edv.de>
parents: 244
diff changeset
294 self.auth_attribs = kw.get('auth_attribs', ())
1940
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
295 self.bookmarks = {} # interwikiname: bookmark
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
296
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
297 # create some vars automatically
737
87cf4c0aac44 hopefully fixes the css_url backtrace for new users when admin removed css_url form field
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 733
diff changeset
298 self.__dict__.update(self._cfg.user_form_defaults)
87cf4c0aac44 hopefully fixes the css_url backtrace for new users when admin removed css_url form field
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 733
diff changeset
299
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
300 if name:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
301 self.name = name
244
42f749b0d8bb fix empty username when using auth_username for autocreation
Thomas Waldmann <tw@waldmann-edv.de>
parents: 238
diff changeset
302 elif auth_username: # this is needed for user_autocreate
42f749b0d8bb fix empty username when using auth_username for autocreation
Thomas Waldmann <tw@waldmann-edv.de>
parents: 238
diff changeset
303 self.name = auth_username
266
1fb19804a4b9 removed some debug code
Thomas Waldmann <tw@waldmann-edv.de>
parents: 265
diff changeset
304
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
305 # create checkbox fields (with default 0)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
306 for key, label in self._cfg.user_checkbox_fields:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
307 setattr(self, key, self._cfg.user_checkbox_defaults.get(key, 0))
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
308
3567
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
309 self.recoverpass_key = ""
3564
474f6ad01900 recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3333
diff changeset
310
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
311 self.enc_password = ""
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
312
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
313 #self.edit_cols = 80
8
da9701a3facb more cleanup
Thomas Waldmann <tw@waldmann-edv.de>
parents: 0
diff changeset
314 self.tz_offset = int(float(self._cfg.tz_offset) * 3600)
da9701a3facb more cleanup
Thomas Waldmann <tw@waldmann-edv.de>
parents: 0
diff changeset
315 self.language = ""
3032
c242772754c5 stats macro which shows the preferred language distribution of the wiki users (Thanks to Nina Kuisma) (ported from 1.6)
Reimar Bauer <rb.proj AT googlemail DOT com>
parents: 2726
diff changeset
316 self.real_language = "" # In case user uses "Browser setting". For language-statistics
3673
bcb50d97d2ef user object: renamed 'loaded' attribute to '_loaded' so it does not get stored to disk
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 3631
diff changeset
317 self._loaded = False
8
da9701a3facb more cleanup
Thomas Waldmann <tw@waldmann-edv.de>
parents: 0
diff changeset
318 self.date_fmt = ""
da9701a3facb more cleanup
Thomas Waldmann <tw@waldmann-edv.de>
parents: 0
diff changeset
319 self.datetime_fmt = ""
1689
7b80735ede14 quicklinks_default and subscribed_pages_default to preload the lists in the user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1638
diff changeset
320 self.quicklinks = self._cfg.quicklinks_default
7b80735ede14 quicklinks_default and subscribed_pages_default to preload the lists in the user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1638
diff changeset
321 self.subscribed_pages = self._cfg.subscribed_pages_default
2429
0cd1152b8da5 default to email notification of all events to ease migration from old scheme
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2426
diff changeset
322 self.email_subscribed_events = self._cfg.email_subscribed_events_default
0cd1152b8da5 default to email notification of all events to ease migration from old scheme
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 2426
diff changeset
323 self.jabber_subscribed_events = self._cfg.jabber_subscribed_events_default
8
da9701a3facb more cleanup
Thomas Waldmann <tw@waldmann-edv.de>
parents: 0
diff changeset
324 self.theme_name = self._cfg.theme_default
da9701a3facb more cleanup
Thomas Waldmann <tw@waldmann-edv.de>
parents: 0
diff changeset
325 self.editor_default = self._cfg.editor_default
da9701a3facb more cleanup
Thomas Waldmann <tw@waldmann-edv.de>
parents: 0
diff changeset
326 self.editor_ui = self._cfg.editor_ui
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
327 self.last_saved = str(time.time())
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
328
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
329 # attrs not saved to profile
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
330 self._request = request
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
331 self._trail = []
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
332
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
333 # we got an already authenticated username:
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
334 check_password = None
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
335 if not self.id and self.auth_username:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
336 self.id = getUserId(request, self.auth_username)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
337 if not password is None:
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
338 check_password = password
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
339 if self.id:
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
340 self.load_from_id(check_password)
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
341 elif self.name:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
342 self.id = getUserId(self._request, self.name)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
343 if self.id:
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
344 # no password given should fail
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
345 self.load_from_id(password or u'')
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
346 else:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
347 self.id = self.make_id()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
348 else:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
349 self.id = self.make_id()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
350
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
351 # "may" so we can say "if user.may.read(pagename):"
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
352 if self._cfg.SecurityPolicy:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
353 self.may = self._cfg.SecurityPolicy(self)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
354 else:
1535
6a7dd84b091f Fixed evil relative import.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents: 1430
diff changeset
355 from MoinMoin.security import Default
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
356 self.may = Default(self)
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
357
689
ff56d9861a71 yet another i18n fix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 688
diff changeset
358 if self.language and not self.language in i18n.wikiLanguages():
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
359 self.language = 'en'
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
360
339
083c2d82a173 add User.__repr__
Thomas Waldmann <tw@waldmann-edv.de>
parents: 266
diff changeset
361 def __repr__(self):
1075
2ecd1e6c084d Fixed security issues in MoinMoin.user (do not reveal the ID), added variable hiding to cgitb.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents: 1005
diff changeset
362 return "<%s.%s at 0x%x name:%r valid:%r>" % (
339
083c2d82a173 add User.__repr__
Thomas Waldmann <tw@waldmann-edv.de>
parents: 266
diff changeset
363 self.__class__.__module__, self.__class__.__name__,
1075
2ecd1e6c084d Fixed security issues in MoinMoin.user (do not reveal the ID), added variable hiding to cgitb.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents: 1005
diff changeset
364 id(self), self.name, self.valid)
339
083c2d82a173 add User.__repr__
Thomas Waldmann <tw@waldmann-edv.de>
parents: 266
diff changeset
365
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
366 def make_id(self):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
367 """ make a new unique user id """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
368 #!!! this should probably be a hash of REMOTE_ADDR, HTTP_USER_AGENT
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
369 # and some other things identifying remote users, then we could also
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
370 # use it reliably in edit locking
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
371 from random import randint
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
372 return "%s.%d" % (str(time.time()), randint(0, 65535))
238
b80624429934 added cfg.user_autocreate, for now for auth.http and auth.ssl_clientcert
Thomas Waldmann <tw@waldmann-edv.de>
parents: 232
diff changeset
373
b80624429934 added cfg.user_autocreate, for now for auth.http and auth.ssl_clientcert
Thomas Waldmann <tw@waldmann-edv.de>
parents: 232
diff changeset
374 def create_or_update(self, changed=False):
b80624429934 added cfg.user_autocreate, for now for auth.http and auth.ssl_clientcert
Thomas Waldmann <tw@waldmann-edv.de>
parents: 232
diff changeset
375 """ Create or update a user profile
b80624429934 added cfg.user_autocreate, for now for auth.http and auth.ssl_clientcert
Thomas Waldmann <tw@waldmann-edv.de>
parents: 232
diff changeset
376
b80624429934 added cfg.user_autocreate, for now for auth.http and auth.ssl_clientcert
Thomas Waldmann <tw@waldmann-edv.de>
parents: 232
diff changeset
377 @param changed: bool, set this to True if you updated the user profile values
b80624429934 added cfg.user_autocreate, for now for auth.http and auth.ssl_clientcert
Thomas Waldmann <tw@waldmann-edv.de>
parents: 232
diff changeset
378 """
b80624429934 added cfg.user_autocreate, for now for auth.http and auth.ssl_clientcert
Thomas Waldmann <tw@waldmann-edv.de>
parents: 232
diff changeset
379 if self._cfg.user_autocreate:
b80624429934 added cfg.user_autocreate, for now for auth.http and auth.ssl_clientcert
Thomas Waldmann <tw@waldmann-edv.de>
parents: 232
diff changeset
380 if not self.valid and not self.disabled or changed: # do we need to save/update?
b80624429934 added cfg.user_autocreate, for now for auth.http and auth.ssl_clientcert
Thomas Waldmann <tw@waldmann-edv.de>
parents: 232
diff changeset
381 self.save() # yes, create/update user profile
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
382
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
383 def __filename(self):
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
384 """ Get filename of the user's file on disk
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
385
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
386 @rtype: string
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
387 @return: full path and filename of user account file
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
388 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
389 return os.path.join(self._cfg.user_dir, self.id or "...NONE...")
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
390
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
391 def exists(self):
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
392 """ Do we have a user account for this user?
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
393
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
394 @rtype: bool
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
395 @return: true, if we have a user account
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
396 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
397 return os.path.exists(self.__filename())
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
398
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
399 def load_from_id(self, password=None):
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
400 """ Load user account data from disk.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
401
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
402 Can only load user data if the id number is already known.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
403
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
404 This loads all member variables, except "id" and "valid" and
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
405 those starting with an underscore.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
406
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
407 @param password: If not None, then the given password must match the
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
408 password in the user account file.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
409 """
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
410 if not self.exists():
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
411 return
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
412
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
413 data = codecs.open(self.__filename(), "r", config.charset).readlines()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
414 user_data = {'enc_password': ''}
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
415 for line in data:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
416 if line[0] == '#':
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
417 continue
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
418
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
419 try:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
420 key, val = line.strip().split('=', 1)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
421 if key not in self._cfg.user_transient_fields and key[0] != '_':
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
422 # Decode list values
1923
eefebea247a0 user profiles: store lists with key[]=val1\tval2... (thanks to Johannes Berg)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1920
diff changeset
423 if key.endswith('[]'):
eefebea247a0 user profiles: store lists with key[]=val1\tval2... (thanks to Johannes Berg)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1920
diff changeset
424 key = key[:-2]
eefebea247a0 user profiles: store lists with key[]=val1\tval2... (thanks to Johannes Berg)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1920
diff changeset
425 val = decodeList(val)
1940
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
426 # Decode dict values
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
427 elif key.endswith('{}'):
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
428 key = key[:-2]
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
429 val = decodeDict(val)
1923
eefebea247a0 user profiles: store lists with key[]=val1\tval2... (thanks to Johannes Berg)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1920
diff changeset
430 # for compatibility reading old files, keep these explicit
eefebea247a0 user profiles: store lists with key[]=val1\tval2... (thanks to Johannes Berg)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1920
diff changeset
431 # we will store them with [] appended
2152
cf4c4a3d6085 Add a list of selectable events user wants to be notified about.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2092
diff changeset
432 elif key in ['quicklinks', 'subscribed_pages', 'subscribed_events']:
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
433 val = decodeList(val)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
434 user_data[key] = val
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
435 except ValueError:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
436 pass
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
437
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
438 # Validate data from user file. In case we need to change some
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
439 # values, we set 'changed' flag, and later save the user data.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
440 changed = 0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
441
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
442 if password is not None:
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
443 # Check for a valid password, possibly changing storage
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
444 valid, changed = self._validatePassword(user_data)
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
445 if not valid:
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
446 return
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
447
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
448 # Remove ignored checkbox values from user data
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
449 for key, label in self._cfg.user_checkbox_fields:
1868
64507f46beb2 reduce usage of has_key()
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1832
diff changeset
450 if key in user_data and key in self._cfg.user_checkbox_disable:
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
451 del user_data[key]
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
452
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
453 # Copy user data into user object
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
454 for key, val in user_data.items():
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
455 vars(self)[key] = val
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
456
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
457 self.tz_offset = int(self.tz_offset)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
458
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
459 # Remove old unsupported attributes from user data file.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
460 remove_attributes = ['passwd', 'show_emoticons']
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
461 for attr in remove_attributes:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
462 if hasattr(self, attr):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
463 delattr(self, attr)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
464 changed = 1
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
465
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
466 # make sure checkboxes are boolean
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
467 for key, label in self._cfg.user_checkbox_fields:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
468 try:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
469 setattr(self, key, int(getattr(self, key)))
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
470 except ValueError:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
471 setattr(self, key, 0)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
472
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
473 # convert (old) hourly format to seconds
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
474 if -24 <= self.tz_offset and self.tz_offset <= 24:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
475 self.tz_offset = self.tz_offset * 3600
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
476
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
477 # clear trail
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
478 self._trail = []
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
479
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
480 if not self.disabled:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
481 self.valid = 1
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
482
2493
f3e3ffa68a7f Send UserCreatedEvent from user.save(), not the newaccount action.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2429
diff changeset
483 # Mark this user as loaded from disk, so UserCreatedEvent is not sent
3673
bcb50d97d2ef user object: renamed 'loaded' attribute to '_loaded' so it does not get stored to disk
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 3631
diff changeset
484 self._loaded = True
2493
f3e3ffa68a7f Send UserCreatedEvent from user.save(), not the newaccount action.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2429
diff changeset
485
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
486 # If user data has been changed, save fixed user data.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
487 if changed:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
488 self.save()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
489
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
490 def _validatePassword(self, data):
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
491 """
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
492 Check user password.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
493
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
494 This is a private method and should not be used by clients.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
495
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
496 @param data: dict with user data (from storage)
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
497 @rtype: 2 tuple (bool, bool)
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
498 @return: password is valid, enc_password changed
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
499 """
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
500 epwd = data['enc_password']
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
501
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
502 # If we have no password set, we don't accept login with username
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
503 if not epwd:
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
504 return False, False
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
505
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
506 # Get the clear text password from the form (require non empty
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
507 # password)
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
508 password = self._request.form.get('password', [None])[0]
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
509 if not password:
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
510 return False, False
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
511
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
512 if epwd[:5] == '{SHA}':
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
513 enc = '{SHA}' + base64.encodestring(sha.new(password).digest()).rstrip()
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
514 if epwd == enc:
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
515 data['enc_password'] = encodePassword(password)
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
516 return True, True
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
517 return False, False
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
518
3808
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
519 if epwd[:6] == '{SSHA}':
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
520 print epwd[6:]
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
521 data = base64.b64decode(epwd[6:])
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
522 salt = data[20:]
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
523 hash = sha.new(password)
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
524 hash.update(salt)
8c5fbc62dd1d user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3707
diff changeset
525 return hash.digest() == data[:20], False
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
526
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
527 # No encoded password match, this must be wrong password
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
528 return False, False
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
529
1951
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
530 def persistent_items(self):
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
531 """ items we want to store into the user profile """
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
532 return [(key, value) for key, value in vars(self).items()
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
533 if key not in self._cfg.user_transient_fields and key[0] != '_']
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
534
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
535 def save(self):
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
536 """ Save user account data to user account file on disk.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
537
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
538 This saves all member variables, except "id" and "valid" and
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
539 those starting with an underscore.
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
540 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
541 if not self.id:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
542 return
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
543
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
544 user_dir = self._cfg.user_dir
1430
fd7166892bd3 check for non-existing dir before calling os.makedirs
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1428
diff changeset
545 if not os.path.exists(user_dir):
fd7166892bd3 check for non-existing dir before calling os.makedirs
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1428
diff changeset
546 os.makedirs(user_dir)
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
547
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
548 self.last_saved = str(time.time())
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
549
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
550 # !!! should write to a temp file here to avoid race conditions,
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
551 # or even better, use locking
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
552
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
553 data = codecs.open(self.__filename(), "w", config.charset)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
554 data.write("# Data saved '%s' for id '%s'\n" % (
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
555 time.strftime(self._cfg.datetime_fmt, time.localtime(time.time())),
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
556 self.id))
1951
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
557 attrs = self.persistent_items()
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
558 attrs.sort()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
559 for key, value in attrs:
1951
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
560 # Encode list values
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
561 if isinstance(value, list):
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
562 key += '[]'
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
563 value = encodeList(value)
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
564 # Encode dict values
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
565 elif isinstance(value, dict):
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
566 key += '{}'
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
567 value = encodeDict(value)
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
568 line = u"%s=%s\n" % (key, unicode(value))
a05a3b447db5 interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1940
diff changeset
569 data.write(line)
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
570 data.close()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
571
3103
4ede355c6089 bugfix for renaming of users (/MoinMoinBugs/RenamingUserAllowsOldUsernameToLogin) (ported from 1.6)
Reimar Bauer <rb.proj AT googlemail DOT com>
parents: 3101
diff changeset
572 arena = 'user'
4ede355c6089 bugfix for renaming of users (/MoinMoinBugs/RenamingUserAllowsOldUsernameToLogin) (ported from 1.6)
Reimar Bauer <rb.proj AT googlemail DOT com>
parents: 3101
diff changeset
573 key = 'name2id'
3175
2a3a6cb34e45 pylint findings: fix some harmless stuff
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 3172
diff changeset
574 caching.CacheEntry(self._request, arena, key, scope='wiki').remove()
3103
4ede355c6089 bugfix for renaming of users (/MoinMoinBugs/RenamingUserAllowsOldUsernameToLogin) (ported from 1.6)
Reimar Bauer <rb.proj AT googlemail DOT com>
parents: 3101
diff changeset
575 try:
4ede355c6089 bugfix for renaming of users (/MoinMoinBugs/RenamingUserAllowsOldUsernameToLogin) (ported from 1.6)
Reimar Bauer <rb.proj AT googlemail DOT com>
parents: 3101
diff changeset
576 del self._request.cfg.cache.name2id
4ede355c6089 bugfix for renaming of users (/MoinMoinBugs/RenamingUserAllowsOldUsernameToLogin) (ported from 1.6)
Reimar Bauer <rb.proj AT googlemail DOT com>
parents: 3101
diff changeset
577 except:
4ede355c6089 bugfix for renaming of users (/MoinMoinBugs/RenamingUserAllowsOldUsernameToLogin) (ported from 1.6)
Reimar Bauer <rb.proj AT googlemail DOT com>
parents: 3101
diff changeset
578 pass
3707
cfbb31fbd6b7 clear openid cache when saving a user...
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3673
diff changeset
579 key = 'openid2id'
cfbb31fbd6b7 clear openid cache when saving a user...
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3673
diff changeset
580 caching.CacheEntry(self._request, arena, key, scope='wiki').remove()
cfbb31fbd6b7 clear openid cache when saving a user...
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3673
diff changeset
581 try:
cfbb31fbd6b7 clear openid cache when saving a user...
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3673
diff changeset
582 del self._request.cfg.cache.openid2id
cfbb31fbd6b7 clear openid cache when saving a user...
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3673
diff changeset
583 except:
cfbb31fbd6b7 clear openid cache when saving a user...
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3673
diff changeset
584 pass
3120
a7c1680aeaa0 PEP8 fixes, mostly whitespace
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 3103
diff changeset
585
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
586 if not self.disabled:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
587 self.valid = 1
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
588
3673
bcb50d97d2ef user object: renamed 'loaded' attribute to '_loaded' so it does not get stored to disk
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 3631
diff changeset
589 if not self._loaded:
2493
f3e3ffa68a7f Send UserCreatedEvent from user.save(), not the newaccount action.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2429
diff changeset
590 event = events.UserCreatedEvent(self._request, self)
f3e3ffa68a7f Send UserCreatedEvent from user.save(), not the newaccount action.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2429
diff changeset
591 events.send_event(event)
f3e3ffa68a7f Send UserCreatedEvent from user.save(), not the newaccount action.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2429
diff changeset
592
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
593 # -----------------------------------------------------------------
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
594 # Time and date formatting
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
595
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
596 def getTime(self, tm):
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
597 """ Get time in user's timezone.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
598
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
599 @param tm: time (UTC UNIX timestamp)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
600 @rtype: int
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
601 @return: tm tuple adjusted for user's timezone
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
602 """
476
4be11eec9c4f MoinMoin.util.datetime -> timefuncs to avoid conflict/confusion with stdlib datetime, also moved util.W3CDate there
Thomas Waldmann <tw@waldmann-edv.de>
parents: 449
diff changeset
603 return timefuncs.tmtuple(tm + self.tz_offset)
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
604
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
605
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
606 def getFormattedDate(self, tm):
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
607 """ Get formatted date adjusted for user's timezone.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
608
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
609 @param tm: time (UTC UNIX timestamp)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
610 @rtype: string
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
611 @return: formatted date, see cfg.date_fmt
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
612 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
613 date_fmt = self.date_fmt or self._cfg.date_fmt
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
614 return time.strftime(date_fmt, self.getTime(tm))
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
615
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
616
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
617 def getFormattedDateTime(self, tm):
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
618 """ Get formatted date and time adjusted for user's timezone.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
619
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
620 @param tm: time (UTC UNIX timestamp)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
621 @rtype: string
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
622 @return: formatted date and time, see cfg.datetime_fmt
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
623 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
624 datetime_fmt = self.datetime_fmt or self._cfg.datetime_fmt
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
625 return time.strftime(datetime_fmt, self.getTime(tm))
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
626
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
627 # -----------------------------------------------------------------
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
628 # Bookmark
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
629
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
630 def setBookmark(self, tm):
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
631 """ Set bookmark timestamp.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
632
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
633 @param tm: timestamp
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
634 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
635 if self.valid:
1940
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
636 interwikiname = unicode(self._cfg.interwikiname or '')
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
637 bookmark = unicode(tm)
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
638 self.bookmarks[interwikiname] = bookmark
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
639 self.save()
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
640
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
641 def getBookmark(self):
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
642 """ Get bookmark timestamp.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
643
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
644 @rtype: int
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
645 @return: bookmark timestamp or None
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
646 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
647 bm = None
1940
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
648 interwikiname = unicode(self._cfg.interwikiname or '')
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
649 if self.valid:
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
650 try:
1940
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
651 bm = int(self.bookmarks[interwikiname])
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
652 except (ValueError, KeyError):
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
653 pass
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
654 return bm
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
655
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
656 def delBookmark(self):
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
657 """ Removes bookmark timestamp.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
658
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
659 @rtype: int
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
660 @return: 0 on success, 1 on failure
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
661 """
1940
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
662 interwikiname = unicode(self._cfg.interwikiname or '')
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
663 if self.valid:
1940
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
664 try:
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
665 del self.bookmarks[interwikiname]
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
666 except KeyError:
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
667 return 1
d7296d36e6f0 enable user storage code to save simple dicts to user profile, use that to save RC bookmarks into user profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1935
diff changeset
668 self.save()
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
669 return 0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
670 return 1
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
671
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
672 # -----------------------------------------------------------------
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
673 # Subscribe
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
674
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
675 def getSubscriptionList(self):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
676 """ Get list of pages this user has subscribed to
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
677
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
678 @rtype: list
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
679 @return: pages this user has subscribed to
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
680 """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
681 return self.subscribed_pages
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
682
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
683 def isSubscribedTo(self, pagelist):
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
684 """ Check if user subscription matches any page in pagelist.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
685
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
686 The subscription list may contain page names or interwiki page
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
687 names. e.g 'Page Name' or 'WikiName:Page_Name'
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
688
2165
eed1c7da25eb test_user: fix wrong subscription tests and a few other problems
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2152
diff changeset
689 TODO: check if it's fast enough when getting called for many
eed1c7da25eb test_user: fix wrong subscription tests and a few other problems
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2152
diff changeset
690 users from page.getSubscribersList()
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
691
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
692 @param pagelist: list of pages to check for subscription
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
693 @rtype: bool
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
694 @return: if user is subscribed any page in pagelist
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
695 """
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
696 if not self.valid:
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
697 return False
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
698
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
699 import re
94
7f531b511f2e fix isSubscribedTo when calling multiple times, for example from page.getSubscribersList()
Nir Soffer <nirs@freeshell.org>
parents: 90
diff changeset
700 # Create a new list with both names and interwiki names.
7f531b511f2e fix isSubscribedTo when calling multiple times, for example from page.getSubscribersList()
Nir Soffer <nirs@freeshell.org>
parents: 90
diff changeset
701 pages = pagelist[:]
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
702 if self._cfg.interwikiname:
94
7f531b511f2e fix isSubscribedTo when calling multiple times, for example from page.getSubscribersList()
Nir Soffer <nirs@freeshell.org>
parents: 90
diff changeset
703 pages += [self._interWikiName(pagename) for pagename in pagelist]
7f531b511f2e fix isSubscribedTo when calling multiple times, for example from page.getSubscribersList()
Nir Soffer <nirs@freeshell.org>
parents: 90
diff changeset
704 # Create text for regular expression search
7f531b511f2e fix isSubscribedTo when calling multiple times, for example from page.getSubscribersList()
Nir Soffer <nirs@freeshell.org>
parents: 90
diff changeset
705 text = '\n'.join(pages)
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
706
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
707 for pattern in self.getSubscriptionList():
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
708 # Try simple match first
94
7f531b511f2e fix isSubscribedTo when calling multiple times, for example from page.getSubscribersList()
Nir Soffer <nirs@freeshell.org>
parents: 90
diff changeset
709 if pattern in pages:
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
710 return True
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
711 # Try regular expression search, skipping bad patterns
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
712 try:
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
713 pattern = re.compile(r'^%s$' % pattern, re.M)
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
714 except re.error:
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
715 continue
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
716 if pattern.search(text):
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
717 return True
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
718
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
719 return False
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
720
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
721 def subscribe(self, pagename):
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
722 """ Subscribe to a wiki page.
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
723
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
724 To enable shared farm users, if the wiki has an interwiki name,
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
725 page names are saved as interwiki names.
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
726
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
727 @param pagename: name of the page to subscribe
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
728 @type pagename: unicode
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
729 @rtype: bool
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
730 @return: if page was subscribed
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
731 """
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
732 if self._cfg.interwikiname:
121
e61a09408702 fix name error in user.subscribe
Nir Soffer <nirs@freeshell.org>
parents: 94
diff changeset
733 pagename = self._interWikiName(pagename)
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
734
121
e61a09408702 fix name error in user.subscribe
Nir Soffer <nirs@freeshell.org>
parents: 94
diff changeset
735 if pagename not in self.subscribed_pages:
e61a09408702 fix name error in user.subscribe
Nir Soffer <nirs@freeshell.org>
parents: 94
diff changeset
736 self.subscribed_pages.append(pagename)
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
737 self.save()
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
738
2065
23d90aae61b5 Send events when an user subscribes to a page and when page gets reverted.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2035
diff changeset
739 # Send a notification
23d90aae61b5 Send events when an user subscribes to a page and when page gets reverted.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2035
diff changeset
740 from MoinMoin.events import SubscribedToPageEvent, send_event
23d90aae61b5 Send events when an user subscribes to a page and when page gets reverted.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2035
diff changeset
741 e = SubscribedToPageEvent(self._request, pagename, self.name)
23d90aae61b5 Send events when an user subscribes to a page and when page gets reverted.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents: 2035
diff changeset
742 send_event(e)
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
743 return True
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
744
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
745 return False
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
746
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
747 def unsubscribe(self, pagename):
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
748 """ Unsubscribe a wiki page.
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
749
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
750 Try to unsubscribe by removing non-interwiki name (leftover
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
751 from old use files) and interwiki name from the subscription
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
752 list.
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
753
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
754 Its possible that the user will be subscribed to a page by more
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
755 then one pattern. It can be both pagename and interwiki name,
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
756 or few patterns that all of them match the page. Therefore, we
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
757 must check if the user is still subscribed to the page after we
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
758 try to remove names from the list.
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
759
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
760 @param pagename: name of the page to subscribe
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
761 @type pagename: unicode
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
762 @rtype: bool
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
763 @return: if unsubscrieb was successful. If the user has a
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
764 regular expression that match, it will always fail.
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
765 """
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
766 changed = False
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
767 if pagename in self.subscribed_pages:
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
768 self.subscribed_pages.remove(pagename)
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
769 changed = True
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
770
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
771 interWikiName = self._interWikiName(pagename)
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
772 if interWikiName and interWikiName in self.subscribed_pages:
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
773 self.subscribed_pages.remove(interWikiName)
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
774 changed = True
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
775
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
776 if changed:
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
777 self.save()
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
778 return not self.isSubscribedTo([pagename])
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
779
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
780 # -----------------------------------------------------------------
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
781 # Quicklinks
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
782
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
783 def getQuickLinks(self):
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
784 """ Get list of pages this user wants in the navibar
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
785
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
786 @rtype: list
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
787 @return: quicklinks from user account
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
788 """
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
789 return self.quicklinks
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
790
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
791 def isQuickLinkedTo(self, pagelist):
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
792 """ Check if user quicklink matches any page in pagelist.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
793
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
794 @param pagelist: list of pages to check for quicklinks
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
795 @rtype: bool
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
796 @return: if user has quicklinked any page in pagelist
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
797 """
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
798 if not self.valid:
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
799 return False
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
800
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
801 for pagename in pagelist:
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
802 if pagename in self.quicklinks:
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
803 return True
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
804 interWikiName = self._interWikiName(pagename)
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
805 if interWikiName and interWikiName in self.quicklinks:
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
806 return True
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
807
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
808 return False
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
809
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
810 def addQuicklink(self, pagename):
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
811 """ Adds a page to the user quicklinks
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
812
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
813 If the wiki has an interwiki name, all links are saved as
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
814 interwiki names. If not, as simple page name.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
815
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
816 @param pagename: page name
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
817 @type pagename: unicode
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
818 @rtype: bool
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
819 @return: if pagename was added
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
820 """
22
a47550d21d2d quicklinks: avoid dupes, dont render as interwiki if wiki == self
Thomas Waldmann <tw@waldmann-edv.de>
parents: 8
diff changeset
821 changed = False
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
822 interWikiName = self._interWikiName(pagename)
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
823 if interWikiName:
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
824 if pagename in self.quicklinks:
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
825 self.quicklinks.remove(pagename)
22
a47550d21d2d quicklinks: avoid dupes, dont render as interwiki if wiki == self
Thomas Waldmann <tw@waldmann-edv.de>
parents: 8
diff changeset
826 changed = True
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
827 if interWikiName not in self.quicklinks:
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
828 self.quicklinks.append(interWikiName)
22
a47550d21d2d quicklinks: avoid dupes, dont render as interwiki if wiki == self
Thomas Waldmann <tw@waldmann-edv.de>
parents: 8
diff changeset
829 changed = True
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
830 else:
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
831 if pagename not in self.quicklinks:
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
832 self.quicklinks.append(pagename)
22
a47550d21d2d quicklinks: avoid dupes, dont render as interwiki if wiki == self
Thomas Waldmann <tw@waldmann-edv.de>
parents: 8
diff changeset
833 changed = True
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
834
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
835 if changed:
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
836 self.save()
22
a47550d21d2d quicklinks: avoid dupes, dont render as interwiki if wiki == self
Thomas Waldmann <tw@waldmann-edv.de>
parents: 8
diff changeset
837 return changed
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
838
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
839 def removeQuicklink(self, pagename):
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
840 """ Remove a page from user quicklinks
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
841
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
842 Remove both interwiki and simple name from quicklinks.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
843
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
844 @param pagename: page name
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
845 @type pagename: unicode
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
846 @rtype: bool
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
847 @return: if pagename was removed
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
848 """
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
849 changed = False
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
850 interWikiName = self._interWikiName(pagename)
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
851 if interWikiName and interWikiName in self.quicklinks:
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
852 self.quicklinks.remove(interWikiName)
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
853 changed = True
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
854 if pagename in self.quicklinks:
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
855 self.quicklinks.remove(pagename)
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
856 changed = True
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
857
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
858 if changed:
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
859 self.save()
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
860 return changed
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
861
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
862 def _interWikiName(self, pagename):
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
863 """ Return the inter wiki name of a page name
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
864
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
865 @param pagename: page name
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
866 @type pagename: unicode
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
867 """
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
868 if not self._cfg.interwikiname:
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
869 return None
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
870
88
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
871 return "%s:%s" % (self._cfg.interwikiname, pagename)
9f037347955c fixed quicklink bug when interwiki is None, create simpler addQuicklink and removeQuicklink methods, simplify isQuicklinkedTo method
Nir Soffer <nirs@freeshell.org>
parents: 34
diff changeset
872
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
873 # -----------------------------------------------------------------
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
874 # Trail
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
875
3101
65322abb0a33 Fix trail for anon users without a session, do not show a single page. (ported from 1.6)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 3069
diff changeset
876 def _wantTrail(self):
3172
c923623b5e30 fix anon session detection for trail display
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 3138
diff changeset
877 return (not self.valid and self._request.session.is_stored # anon session
3101
65322abb0a33 Fix trail for anon users without a session, do not show a single page. (ported from 1.6)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 3069
diff changeset
878 or self.valid and (self.show_page_trail or self.remember_last_visit)) # logged-in session
65322abb0a33 Fix trail for anon users without a session, do not show a single page. (ported from 1.6)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 3069
diff changeset
879
1956
477760dd8487 speedup addTrail by passing existing page object
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1951
diff changeset
880 def addTrail(self, page):
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
881 """ Add page to trail.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
882
1956
477760dd8487 speedup addTrail by passing existing page object
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1951
diff changeset
883 @param page: the page (object) to add to the trail
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
884 """
3101
65322abb0a33 Fix trail for anon users without a session, do not show a single page. (ported from 1.6)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 3069
diff changeset
885 if self._wantTrail():
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
886 # load trail if not known
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
887 self.getTrail()
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
888
1956
477760dd8487 speedup addTrail by passing existing page object
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1951
diff changeset
889 pagename = page.page_name
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
890 # Add only existing pages that the user may read
3101
65322abb0a33 Fix trail for anon users without a session, do not show a single page. (ported from 1.6)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 3069
diff changeset
891 if not (page.exists() and self._request.user.may.read(pagename)):
65322abb0a33 Fix trail for anon users without a session, do not show a single page. (ported from 1.6)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 3069
diff changeset
892 return
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
893
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
894 # Save interwiki links internally
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
895 if self._cfg.interwikiname:
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
896 pagename = self._interWikiName(pagename)
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
897
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
898 # Don't append tail to trail ;)
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
899 if self._trail and self._trail[-1] == pagename:
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
900 return
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
901
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
902 # Append new page, limiting the length
232
31c1fbb101a3 remove string/Cookie import, rewrite filter/map
Thomas Waldmann <tw@waldmann-edv.de>
parents: 138
diff changeset
903 self._trail = [p for p in self._trail if p != pagename]
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
904 self._trail = self._trail[-(self._cfg.trail_size-1):]
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
905 self._trail.append(pagename)
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
906 self.saveTrail()
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
907
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
908 def saveTrail(self):
2010
d234621dbf2f don't store trail for first request
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 1986
diff changeset
909 """ Save trail into session """
d234621dbf2f don't store trail for first request
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 1986
diff changeset
910 if not self._request.session.is_new:
d234621dbf2f don't store trail for first request
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 1986
diff changeset
911 self._request.session['trail'] = self._trail
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
912
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
913 def getTrail(self):
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
914 """ Return list of recently visited pages.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
915
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
916 @rtype: list
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
917 @return: pages in trail
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
918 """
3101
65322abb0a33 Fix trail for anon users without a session, do not show a single page. (ported from 1.6)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 3069
diff changeset
919 if not self._trail and self._wantTrail():
1935
740d9939ffe9 use session object to store page trail (even for anon users, if anon sessions are enabled)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1923
diff changeset
920 trail = self._request.session.get('trail', [])
232
31c1fbb101a3 remove string/Cookie import, rewrite filter/map
Thomas Waldmann <tw@waldmann-edv.de>
parents: 138
diff changeset
921 trail = [t.strip() for t in trail]
31c1fbb101a3 remove string/Cookie import, rewrite filter/map
Thomas Waldmann <tw@waldmann-edv.de>
parents: 138
diff changeset
922 trail = [t for t in trail if t]
31c1fbb101a3 remove string/Cookie import, rewrite filter/map
Thomas Waldmann <tw@waldmann-edv.de>
parents: 138
diff changeset
923 self._trail = trail[-self._cfg.trail_size:]
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
924
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
925 return self._trail
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
926
89
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
927 # -----------------------------------------------------------------
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
928 # Other
4e44f6dfdfc2 user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents: 88
diff changeset
929
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
930 def isCurrentUser(self):
1963
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
931 """ Check if this user object is the user doing the current request """
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
932 return self._request.user.name == self.name
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
933
448
45924beef130 user.isSuperUser() check, require cfg.superuser being a list or tuple
Thomas Waldmann <tw@waldmann-edv.de>
parents: 416
diff changeset
934 def isSuperUser(self):
1963
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
935 """ Check if this user is superuser """
1597
bbe187af4fc0 integrated MMDE (build scripts need more work)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1550
diff changeset
936 request = self._request
3138
2ba284b78861 fix a7fb50fd67f6, request.user must exist
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3123
diff changeset
937 if request.cfg.DesktopEdition and request.remote_addr == '127.0.0.1' and request.user and request.user.valid:
1597
bbe187af4fc0 integrated MMDE (build scripts need more work)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1550
diff changeset
938 # the DesktopEdition gives any local user superuser powers
bbe187af4fc0 integrated MMDE (build scripts need more work)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1550
diff changeset
939 return True
bbe187af4fc0 integrated MMDE (build scripts need more work)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1550
diff changeset
940 superusers = request.cfg.superuser
449
8ec16f62e989 Moved type check of the superuser setting.
Alexander Schremmer <alex@alexanderweb.de.tla>
parents: 448
diff changeset
941 assert isinstance(superusers, (list, tuple))
8ec16f62e989 Moved type check of the superuser setting.
Alexander Schremmer <alex@alexanderweb.de.tla>
parents: 448
diff changeset
942 return self.valid and self.name and self.name in superusers
448
45924beef130 user.isSuperUser() check, require cfg.superuser being a list or tuple
Thomas Waldmann <tw@waldmann-edv.de>
parents: 416
diff changeset
943
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
944 def host(self):
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
945 """ Return user host """
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
946 _ = self._request.getText
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
947 host = self.isCurrentUser() and self._cfg.show_hosts and self._request.remote_addr
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
948 return host or _("<unknown>")
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
949
1154
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
950 def wikiHomeLink(self):
1963
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
951 """ Return wiki markup usable as a link to the user homepage,
1154
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
952 it doesn't matter whether it already exists or not.
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
953 """
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
954 wikiname, pagename = wikiutil.getInterwikiHomePage(self._request, self.name)
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
955 if wikiname == 'Self':
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
956 if wikiutil.isStrictWikiname(self.name):
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
957 markup = pagename
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
958 else:
2726
6cb75379c073 change ["free link"] to [[free link]] in all built-in markup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2493
diff changeset
959 markup = '[[%s]]' % pagename
1154
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
960 else:
2726
6cb75379c073 change ["free link"] to [[free link]] in all built-in markup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2493
diff changeset
961 markup = '[[%s:%s]]' % (wikiname, pagename)
1154
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
962 return markup
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
963
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
964 def signature(self):
1154
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
965 """ Return user signature using wiki markup
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
966
1154
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
967 Users sign with a link to their homepage.
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
968 Visitors return their host address.
2286
01f05e74aa9c Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 2165
diff changeset
969
90
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
970 TODO: The signature use wiki format only, for example, it will
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
971 not create a link when using rst format. It will also break if
246601c7b298 fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents: 89
diff changeset
972 we change wiki syntax.
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
973 """
1154
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
974 if self.name:
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
975 return self.wikiHomeLink()
44632345fbfb mailimport: use link to homepage or realname in from/to column, user.wikiHomeLink() to generate markup for user's homepage link
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1075
diff changeset
976 else:
0
77665d8e2254 tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff changeset
977 return self.host()
1005
e1e1885deec1 whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 826
diff changeset
978
3567
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
979 def generate_recovery_token(self):
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
980 key = random_string(64, "abcdefghijklmnopqrstuvwxyz0123456789")
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
981 msg = str(int(time.time()))
3601
148669312bf8 fix hmac for python 2.4
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3567
diff changeset
982 h = hmac.new(key, msg, sha).hexdigest()
3567
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
983 self.recoverpass_key = key
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
984 self.save()
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
985 return msg + '-' + h
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
986
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
987 def apply_recovery_token(self, tok, newpass):
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
988 key = self.recoverpass_key
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
989 parts = tok.split('-')
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
990 if len(parts) != 2:
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
991 return False
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
992 try:
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
993 stamp = int(parts[0])
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
994 except ValueError:
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
995 return False
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
996 # only allow it to be valid for twelve hours
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
997 if stamp + 12*60*60 < time.time():
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
998 return False
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
999 # check hmac
3631
6907fd1613a5 fix the second hmac use for python 2.4
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3601
diff changeset
1000 h = hmac.new(self.recoverpass_key, str(stamp), sha).hexdigest()
3567
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
1001 if h != parts[1]:
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
1002 return False
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
1003 self.recoverpass_key = ""
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
1004 self.enc_password = encodePassword(newpass)
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
1005 self.save()
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
1006 return True
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
1007
138
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1008 def mailAccountData(self, cleartext_passwd=None):
1963
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
1009 """ Mail a user who forgot his password a message enabling
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
1010 him to login again.
de42f84ddb3c user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1957
diff changeset
1011 """
750
f158c4e8fea2 moved mail related functions to MoinMoin.mail
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 737
diff changeset
1012 from MoinMoin.mail import sendmail
1784
2668d470091f wikiutil.getSysPage renamed to getLocalizedPage
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 1689
diff changeset
1013 from MoinMoin.wikiutil import getLocalizedPage
138
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1014 _ = self._request.getText
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1015
3567
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
1016 tok = self.generate_recovery_token()
416
fb5e1ecdbc33 generate rnd password when there is none yet
Thomas Waldmann <tw@waldmann-edv.de>
parents: 339
diff changeset
1017
138
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1018 text = '\n' + _("""\
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1019 Login Name: %s
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1020
3564
474f6ad01900 recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3333
diff changeset
1021 Password recovery token: %s
138
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1022
3564
474f6ad01900 recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3333
diff changeset
1023 Password reset URL: %s/?action=recoverpass&name=%s&token=%s
3123
5cb80bd604b4 refactored _() getText calls to match new api
Radomir Dopieralski <moindev@sheep.art.pl>
parents: 3120
diff changeset
1024 """) % (
3564
474f6ad01900 recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3333
diff changeset
1025 self.name,
3567
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
1026 tok,
3564
474f6ad01900 recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3333
diff changeset
1027 self._request.getBaseURL(),
474f6ad01900 recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3333
diff changeset
1028 url_quote_plus(self.name),
3567
ddf31f2ae8e3 use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3564
diff changeset
1029 tok, )
138
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1030
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1031 text = _("""\
3564
474f6ad01900 recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3333
diff changeset
1032 Somebody has requested to email you a password recovery token.
138
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1033
3564
474f6ad01900 recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3333
diff changeset
1034 If you lost your password, please go to the password reset URL below or
474f6ad01900 recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3333
diff changeset
1035 go to the password recovery page again and enter your username and the
474f6ad01900 recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents: 3333
diff changeset
1036 recovery token.
3123
5cb80bd604b4 refactored _() getText calls to match new api
Radomir Dopieralski <moindev@sheep.art.pl>
parents: 3120
diff changeset
1037 """) + text
138
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1038
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1039
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1040 subject = _('[%(sitename)s] Your wiki account data',
3123
5cb80bd604b4 refactored _() getText calls to match new api
Radomir Dopieralski <moindev@sheep.art.pl>
parents: 3120
diff changeset
1041 ) % {'sitename': self._cfg.sitename or "Wiki"}
750
f158c4e8fea2 moved mail related functions to MoinMoin.mail
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: 737
diff changeset
1042 mailok, msg = sendmail.sendmail(self._request, [self.email], subject,
138
81654a482b3a Added createonly parameter to UserPreferences macro and userform action; moved mailAccountData to the user object; extended SystemAdmin to offer 'send acount data' links; fixed minor quoting problem in Page.link_to()
Florian Festi <Florian.Festi@trick.informatik.uni-stuttgart.de>
parents: 121
diff changeset
1043 text, mail_from=self._cfg.mail_from)
3069
15d744f727c9 UserPreferences 'send account data' also accepts username now (not only email addr), thanks to Joel Nackman (ported from 1.6)
Reimar Bauer <rb.proj AT googlemail DOT com>
parents: 3032
diff changeset
1044 return mailok, msg
416
fb5e1ecdbc33 generate rnd password when there is none yet
Thomas Waldmann <tw@waldmann-edv.de>
parents: 339
diff changeset
1045