Mercurial > moin > 1.9
annotate MoinMoin/user.py @ 6028:1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Before this, we maintained one cache file per attribute (e.g. name2id, openid2id,
...) - the related code did multiple passes over all user profiles to rebuild these
cache files.
Now doing a one-pass rebuild, writing all attribute -> userid mappings into
one on-disk cache file called "lookup".
Additionally to "name" and "openids", support fast lookup for "email" and "jid" also.
On profile save, we use to just kill the cache and let it rebuild. Now the cache
is read, updated and written back (which is much less expensive for wikis with more
than a few users).
Did some refactoring also, reducing duplication, breaking down the code into smaller
functions / methods.
author | Thomas Waldmann <tw AT waldmann-edv DOT de> |
---|---|
date | Wed, 12 Feb 2014 18:22:10 +0100 |
parents | 8618232296b5 |
children | e2da1c1183d8 |
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>, |
5915
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
18 2003-2013 MoinMoin:ThomasWaldmann, |
5720
69668ad0cae7
add support for other password hashes (thanks to Michael Foetsch)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5613
diff
changeset
|
19 2010 Michael Foetsch <foetsch@yahoo.com> |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
20 @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
|
21 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
22 |
4363
817d99d715fe
remove direct usage of deprecated sha module - use hashlib, if possible
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4107
diff
changeset
|
23 import os, time, codecs, base64 |
5720
69668ad0cae7
add support for other password hashes (thanks to Michael Foetsch)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5613
diff
changeset
|
24 import md5crypt |
69668ad0cae7
add support for other password hashes (thanks to Michael Foetsch)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5613
diff
changeset
|
25 |
69668ad0cae7
add support for other password hashes (thanks to Michael Foetsch)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5613
diff
changeset
|
26 try: |
69668ad0cae7
add support for other password hashes (thanks to Michael Foetsch)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5613
diff
changeset
|
27 import crypt |
69668ad0cae7
add support for other password hashes (thanks to Michael Foetsch)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5613
diff
changeset
|
28 except ImportError: |
69668ad0cae7
add support for other password hashes (thanks to Michael Foetsch)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5613
diff
changeset
|
29 crypt = None |
4363
817d99d715fe
remove direct usage of deprecated sha module - use hashlib, if possible
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4107
diff
changeset
|
30 |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
31 from MoinMoin import log |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
32 logging = log.getLogger(__name__) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
33 |
4363
817d99d715fe
remove direct usage of deprecated sha module - use hashlib, if possible
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4107
diff
changeset
|
34 from MoinMoin.support.python_compatibility import hash_new, hmac_new |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
35 |
2493
f3e3ffa68a7f
Send UserCreatedEvent from user.save(), not the newaccount action.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents:
2429
diff
changeset
|
36 from MoinMoin import config, caching, wikiutil, i18n, events |
5904
3a1b92276377
reorder imports, so that MoinMoin.support is already in sys.path
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5902
diff
changeset
|
37 from werkzeug.security import safe_str_cmp as safe_str_equal |
5612
cc15366f7b74
remove all calls to filesys.dc* (dclistdir, dcdisable), remove unused imports
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5532
diff
changeset
|
38 from MoinMoin.util import timefuncs, random_string |
3564
474f6ad01900
recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3333
diff
changeset
|
39 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
|
40 |
6028
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
41 # for efficient lookup <attr> -> userid, we keep an index of this in the cache. |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
42 # the attribute names in here should be uniquely identifying a user. |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
43 CACHED_USER_ATTRS = ['name', 'email', 'jid', 'openids', ] |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
44 |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
45 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
46 def getUserList(request): |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
47 """ 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
|
48 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
49 @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
|
50 @rtype: list |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
51 @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
|
52 """ |
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
|
53 import re |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
54 user_re = re.compile(r'^\d+\.\d+(\.\d+)?$') |
5612
cc15366f7b74
remove all calls to filesys.dc* (dclistdir, dcdisable), remove unused imports
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5532
diff
changeset
|
55 files = os.listdir(request.cfg.user_dir) |
232
31c1fbb101a3
remove string/Cookie import, rewrite filter/map
Thomas Waldmann <tw@waldmann-edv.de>
parents:
138
diff
changeset
|
56 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
|
57 return userlist |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
58 |
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 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
|
60 """ 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
|
61 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
|
62 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
|
63 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
|
64 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
|
65 |
690
e8ccec07515b
Refactored user search by mail address.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
626
diff
changeset
|
66 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
|
67 """ 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
|
68 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
|
69 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
|
70 |
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
|
71 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
|
72 """ 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
|
73 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
|
74 return get_by_filter(request, filter_func) |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
75 |
6028
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
76 |
2011
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
77 def _getUserIdByKey(request, key, search): |
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
78 """ 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
|
79 |
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
80 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
|
81 guaranteed to be unique. |
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
82 |
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
83 @param key: the key to look in |
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
84 @param search: the value to look for |
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
85 @return the corresponding user ID or None |
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
86 """ |
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
87 if not search or not key: |
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
88 return None |
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
89 cfg = request.cfg |
6028
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
90 cfg_cache_attr = key + "2id" |
2011
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
91 try: |
6028
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
92 attr2id = getattr(cfg.cache, cfg_cache_attr) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
93 from_disk = False |
2011
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
94 except AttributeError: |
6028
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
95 # no in-memory cache there - initialize it / load it from disk |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
96 loadLookupCaches(request) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
97 attr2id = getattr(cfg.cache, cfg_cache_attr) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
98 from_disk = True # we just loaded the stuff from disk |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
99 uid = attr2id.get(search, None) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
100 if uid is None and not from_disk: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
101 # we do not have the entry we searched for. |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
102 # we didn't find it in some in-memory cache, try refreshing these from disk |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
103 loadLookupCaches(request) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
104 attr2id = getattr(cfg.cache, cfg_cache_attr) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
105 from_disk = True # we just loaded the stuff from disk |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
106 uid = attr2id.get(search, None) |
2011
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
107 if uid is None: |
6028
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
108 # we do not have the entry we searched for. |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
109 # we don't have it in the on-disk cache, cache MISS. |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
110 # could be because: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
111 # a) ok: we have no such search value in the profiles |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
112 # b) fault: the cache is incoherent with the profiles |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
113 # c) fault: reading the cache from disk failed, due to an error |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
114 # d) ok: same as c), but just because no ondisk cache has been built yet |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
115 rebuildLookupCaches(request) # XXX expensive |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
116 attr2id = getattr(cfg.cache, cfg_cache_attr) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
117 uid = attr2id.get(search, None) |
2011
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
118 return uid |
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
119 |
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
120 |
6028
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
121 def setMemoryLookupCaches(request, cache): |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
122 """set the in-memory cache from the given cache contents |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
123 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
124 @param request: the request object |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
125 @param cache: either a dict of attrname -> attrcache to set the in-memory cache, |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
126 or None to delete the in-memory cache. |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
127 """ |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
128 for attrname in CACHED_USER_ATTRS: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
129 cfg_cache_attr = attrname + "2id" |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
130 if cache is None: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
131 try: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
132 delattr(request.cfg.cache, cfg_cache_attr) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
133 except: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
134 pass |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
135 else: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
136 setattr(request.cfg.cache, cfg_cache_attr, cache[attrname]) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
137 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
138 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
139 def loadLookupCaches(request): |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
140 """load lookup cache contents into memory: cfg.cache.XXX2id""" |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
141 scope, arena, cachekey = 'userdir', 'users', 'lookup' |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
142 diskcache = caching.CacheEntry(request, arena, cachekey, scope=scope, use_pickle=True) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
143 try: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
144 cache = diskcache.content() |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
145 except caching.CacheError: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
146 cache = {} |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
147 for attrname in CACHED_USER_ATTRS: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
148 cache[attrname] = {} |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
149 setMemoryLookupCaches(request, cache) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
150 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
151 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
152 def rebuildLookupCaches(request): |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
153 """complete attrs -> userid lookup cache rebuild""" |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
154 # as there may be thousands of users and reading all profiles is |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
155 # expensive, we just have 1 lookup cache for all interesting user attrs, |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
156 # so we only need to read all profiles ONCE to build the cache. |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
157 scope, arena, key = 'userdir', 'users', 'lookup' |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
158 diskcache = caching.CacheEntry(request, arena, key, scope=scope, use_pickle=True, do_locking=False) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
159 diskcache.lock('w') |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
160 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
161 cache = {} |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
162 for attrname in CACHED_USER_ATTRS: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
163 cache[attrname] = {} |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
164 for userid in getUserList(request): |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
165 u = User(request, id=userid) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
166 for attrname in CACHED_USER_ATTRS: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
167 if hasattr(u, attrname): |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
168 attr2id = cache[attrname] |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
169 value = getattr(u, attrname) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
170 if isinstance(value, list): |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
171 for val in value: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
172 attr2id[val] = userid |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
173 else: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
174 attr2id[value] = userid |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
175 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
176 setMemoryLookupCaches(request, cache) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
177 diskcache.update(cache) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
178 diskcache.unlock() |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
179 return cache |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
180 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
181 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
182 def clearLookupCaches(request): |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
183 """kill the userid lookup cache""" |
6026
28a3951fc9f6
add comments about userid lookup cache killing/rebuilding
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6025
diff
changeset
|
184 # this triggers a rebuild of the cache. |
6028
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
185 setMemoryLookupCaches(request, None) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
186 scope, arena, key = 'userdir', 'users', 'lookup' |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
187 caching.CacheEntry(request, arena, key, scope=scope).remove() |
6025
05a6897ee496
"userdir" caching scope: use it for userid lookup caches, reduce code duplication
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6024
diff
changeset
|
188 |
05a6897ee496
"userdir" caching scope: use it for userid lookup caches, reduce code duplication
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6024
diff
changeset
|
189 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
190 def getUserId(request, searchName): |
1963
de42f84ddb3c
user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1957
diff
changeset
|
191 """ 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
|
192 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
193 @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
|
194 @rtype: string |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
195 @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
|
196 """ |
2011
6cd0e4cc8e18
refactor user.getUserId
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2010
diff
changeset
|
197 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
|
198 |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
199 |
2299
39d11cf4af6c
OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2286
diff
changeset
|
200 def getUserIdByOpenId(request, openid): |
39d11cf4af6c
OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2286
diff
changeset
|
201 """ 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
|
202 |
39d11cf4af6c
OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2286
diff
changeset
|
203 @param openid: the openid to look up |
39d11cf4af6c
OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2286
diff
changeset
|
204 @rtype: string |
39d11cf4af6c
OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2286
diff
changeset
|
205 @return: the corresponding user ID or None |
39d11cf4af6c
OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2286
diff
changeset
|
206 """ |
39d11cf4af6c
OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2286
diff
changeset
|
207 return _getUserIdByKey(request, 'openids', openid) |
39d11cf4af6c
OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2286
diff
changeset
|
208 |
39d11cf4af6c
OpenID relying party (client) support
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
2286
diff
changeset
|
209 |
6027
8618232296b5
optimized notification of superusers on user account creation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6026
diff
changeset
|
210 def superusers(request): |
8618232296b5
optimized notification of superusers on user account creation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6026
diff
changeset
|
211 """ |
8618232296b5
optimized notification of superusers on user account creation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6026
diff
changeset
|
212 yields superuser User objects |
8618232296b5
optimized notification of superusers on user account creation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6026
diff
changeset
|
213 """ |
8618232296b5
optimized notification of superusers on user account creation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6026
diff
changeset
|
214 for name in request.cfg.superuser: |
8618232296b5
optimized notification of superusers on user account creation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6026
diff
changeset
|
215 u = User(request, auth_username=name) |
8618232296b5
optimized notification of superusers on user account creation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6026
diff
changeset
|
216 if u.isSuperUser(): # this checks for addtl. criteria |
8618232296b5
optimized notification of superusers on user account creation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6026
diff
changeset
|
217 yield u |
8618232296b5
optimized notification of superusers on user account creation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6026
diff
changeset
|
218 |
8618232296b5
optimized notification of superusers on user account creation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6026
diff
changeset
|
219 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
220 def getUserIdentification(request, username=None): |
1963
de42f84ddb3c
user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1957
diff
changeset
|
221 """ 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
|
222 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
223 @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
|
224 @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
|
225 @rtype: string |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
226 @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
|
227 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
228 _ = request.getText |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
229 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
230 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
|
231 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
|
232 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
233 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
|
234 |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
235 |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
236 def encodePassword(cfg, pwd, salt=None, scheme=None): |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
237 """ Encode a cleartext password using the default algorithm. |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
238 |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
239 @param cfg: the wiki config |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
240 @param pwd: the cleartext password, (unicode) |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
241 @param salt: the salt for the password (string) or None to generate a |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
242 random salt. |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
243 @param scheme: scheme to use (by default will use cfg.password_scheme) |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
244 @rtype: string |
5918
5126fadbf24f
password related code and tests - clean up and refactor
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5917
diff
changeset
|
245 @return: the password hash in apache htpasswd compatible encoding, |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
246 """ |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
247 if scheme is None: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
248 scheme = cfg.password_scheme |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
249 configured_scheme = True |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
250 else: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
251 configured_scheme = False |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
252 if scheme == '{PASSLIB}': |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
253 return '{PASSLIB}' + cfg.cache.pwd_context.encrypt(pwd, salt=salt) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
254 elif scheme == '{SSHA}': |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
255 pwd = pwd.encode('utf-8') |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
256 if salt is None: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
257 salt = random_string(20) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
258 assert isinstance(salt, str) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
259 hash = hash_new('sha1', pwd) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
260 hash.update(salt) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
261 return '{SSHA}' + base64.encodestring(hash.digest() + salt).rstrip() |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
262 else: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
263 # should never happen as we check the value of cfg.password_scheme |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
264 raise NotImplementedError |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
265 |
1005
e1e1885deec1
whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
826
diff
changeset
|
266 |
5915
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
267 class Fault(Exception): |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
268 """something went wrong""" |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
269 |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
270 class NoSuchUser(Fault): |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
271 """raised if no such user exists""" |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
272 |
5940
1960726cd356
set_password: warn if user has no e-mail address in the profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5939
diff
changeset
|
273 class UserHasNoEMail(Fault): |
1960726cd356
set_password: warn if user has no e-mail address in the profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5939
diff
changeset
|
274 """raised if user has no e-mail address in his profile""" |
1960726cd356
set_password: warn if user has no e-mail address in the profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5939
diff
changeset
|
275 |
5915
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
276 class MailFailed(Fault): |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
277 """raised if e-mail sending failed""" |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
278 |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
279 |
5936
2d3352c547bc
moin account resetpw - misc. improvements
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5930
diff
changeset
|
280 def set_password(request, newpass, u=None, uid=None, uname=None, |
5959
63412f39e2b4
moin account resetpw: add option --skip-invalid to skip users with already invalidated pw hashes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5953
diff
changeset
|
281 notify=False, skip_invalid=False, subject=None, |
5936
2d3352c547bc
moin account resetpw - misc. improvements
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5930
diff
changeset
|
282 text_intro=None, text_msg=None, text_data=None): |
5915
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
283 if uid: |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
284 u = User(request, uid) |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
285 elif uname: |
5930
aac944a51a54
fix bug in set_password (it did not load the user profile, but safe an empty one)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5929
diff
changeset
|
286 u = User(request, auth_username=uname) |
5915
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
287 if u and u.exists(): |
5959
63412f39e2b4
moin account resetpw: add option --skip-invalid to skip users with already invalidated pw hashes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5953
diff
changeset
|
288 if skip_invalid and u.enc_password == '': |
63412f39e2b4
moin account resetpw: add option --skip-invalid to skip users with already invalidated pw hashes
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5953
diff
changeset
|
289 return |
5917
c99f570e274a
moin account resetpw: make password optional, to be able to set a invalid password
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5915
diff
changeset
|
290 if not newpass: |
c99f570e274a
moin account resetpw: make password optional, to be able to set a invalid password
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5915
diff
changeset
|
291 # set a invalid password hash |
c99f570e274a
moin account resetpw: make password optional, to be able to set a invalid password
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5915
diff
changeset
|
292 u.enc_password = '' |
c99f570e274a
moin account resetpw: make password optional, to be able to set a invalid password
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5915
diff
changeset
|
293 else: |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
294 u.enc_password = encodePassword(request.cfg, newpass) |
5915
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
295 u.save() |
5940
1960726cd356
set_password: warn if user has no e-mail address in the profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5939
diff
changeset
|
296 if not u.email: |
1960726cd356
set_password: warn if user has no e-mail address in the profile
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5939
diff
changeset
|
297 raise UserHasNoEMail('User profile does not have an E-Mail address (name: %r id: %r)!' % (u.name, u.id)) |
5929
8d03f3ec97a7
don't try to send email to user if email address in profile is empty
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5922
diff
changeset
|
298 if notify and not u.disabled: |
5936
2d3352c547bc
moin account resetpw - misc. improvements
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5930
diff
changeset
|
299 mailok, msg = u.mailAccountData(subject=subject, |
2d3352c547bc
moin account resetpw - misc. improvements
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5930
diff
changeset
|
300 text_intro=text_intro, text_msg=text_msg, text_data=text_data) |
5915
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
301 if not mailok: |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
302 raise MailFailed(msg) |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
303 else: |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
304 raise NoSuchUser('User does not exist (name: %r id: %r)!' % (u.name, u.id)) |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
305 |
19e8a1c50bda
moin account resetpw - added options --all-users and --notify
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5904
diff
changeset
|
306 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
307 def normalizeName(name): |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
308 """ 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
|
309 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
310 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
|
311 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
|
312 characters. |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
313 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
314 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
|
315 in user names. |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
316 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
317 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
|
318 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
319 @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
|
320 @rtype: unicode |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
321 @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
|
322 """ |
826
8e880418d736
remove all underscore <-> blank magic
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
750
diff
changeset
|
323 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
|
324 # "," 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
|
325 # 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
|
326 # 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
|
327 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
|
328 |
2286
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
329 # 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
|
330 # 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
|
331 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
|
332 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
333 return name |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
334 |
1005
e1e1885deec1
whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
826
diff
changeset
|
335 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
336 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
|
337 """ Validate user name |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
338 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
339 @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
|
340 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
341 normalized = normalizeName(name) |
4146
3b36f0cfc656
(Re)moved normalizePagename from Request into wikiutil library
Florian Krupicka <florian.krupicka@googlemail.com>
parents:
3631
diff
changeset
|
342 return (name == normalized) and not wikiutil.isGroupPage(name, request.cfg) |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
343 |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
344 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
345 def encodeList(items): |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
346 """ 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
|
347 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
348 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
|
349 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
350 @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
|
351 @rtype: unicode |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
352 @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
|
353 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
354 line = [] |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
355 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
|
356 item = item.strip() |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
357 if not item: |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
358 continue |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
359 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
|
360 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
361 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
|
362 return line |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
363 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
364 def decodeList(line): |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
365 """ 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
|
366 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
367 @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
|
368 @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
|
369 @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
|
370 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
371 items = [] |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
372 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
|
373 item = item.strip() |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
374 if not item: |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
375 continue |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
376 items.append(item) |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
377 return items |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
378 |
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
|
379 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
|
380 """ 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
|
381 |
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
|
382 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
|
383 Each item is key:value. |
2286
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
384 |
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
|
385 @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
|
386 @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
|
387 @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
|
388 """ |
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
|
389 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
|
390 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
|
391 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
|
392 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
|
393 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
|
394 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
|
395 |
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
|
396 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
|
397 """ 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
|
398 |
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
|
399 @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
|
400 @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
|
401 @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
|
402 """ |
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
|
403 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
|
404 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
|
405 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
|
406 if not item: |
2286
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
407 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
|
408 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
|
409 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
|
410 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
|
411 |
1005
e1e1885deec1
whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
826
diff
changeset
|
412 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
413 class User: |
1963
de42f84ddb3c
user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1957
diff
changeset
|
414 """ 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
|
415 |
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
|
416 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
|
417 """ Initialize User object |
2286
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
418 |
1986
3475126f78c6
fix some builtin names used as attribute names
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1963
diff
changeset
|
419 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
|
420 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
421 @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
|
422 @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
|
423 @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
|
424 @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
|
425 @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
|
426 (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
|
427 @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
|
428 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
|
429 @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
|
430 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
|
431 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
|
432 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
|
433 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
434 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
|
435 self.valid = 0 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
436 self.id = id |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
437 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
|
438 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
|
439 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
|
440 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
|
441 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
442 # 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
|
443 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
|
444 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
445 if name: |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
446 self.name = name |
4041
4a994a297ba3
replace cfg.user_autocreate setting by autocreate=<boolean> parameter of auth objects
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
3845
diff
changeset
|
447 elif auth_username: # this is needed for user autocreate |
244
42f749b0d8bb
fix empty username when using auth_username for autocreation
Thomas Waldmann <tw@waldmann-edv.de>
parents:
238
diff
changeset
|
448 self.name = auth_username |
266
1fb19804a4b9
removed some debug code
Thomas Waldmann <tw@waldmann-edv.de>
parents:
265
diff
changeset
|
449 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
450 # 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
|
451 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
|
452 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
|
453 |
3567
ddf31f2ae8e3
use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3564
diff
changeset
|
454 self.recoverpass_key = "" |
3564
474f6ad01900
recoverpass: email password reset token rather than sha1
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3333
diff
changeset
|
455 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
456 if password: |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
457 self.enc_password = encodePassword(self._cfg, password) |
0
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 #self.edit_cols = 80 |
8 | 460 self.tz_offset = int(float(self._cfg.tz_offset) * 3600) |
461 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
|
462 self.real_language = "" # In case user uses "Browser setting". For language-statistics |
3842
f40bd4c68aa2
MoinMoin.user: fix MoinMoinBugs/DuplicateNewUserNotification
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
463 self._stored = False |
8 | 464 self.date_fmt = "" |
465 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
|
466 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
|
467 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
|
468 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
|
469 self.jabber_subscribed_events = self._cfg.jabber_subscribed_events_default |
8 | 470 self.theme_name = self._cfg.theme_default |
471 self.editor_default = self._cfg.editor_default | |
472 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
|
473 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
|
474 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
475 # 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
|
476 self._request = request |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
477 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
478 # 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
|
479 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
|
480 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
|
481 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
|
482 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
|
483 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
|
484 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
|
485 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
|
486 elif self.name: |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
487 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
|
488 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
|
489 # 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
|
490 self.load_from_id(password or u'') |
3819
b3b04ffbecd8
user: fix password validation
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3818
diff
changeset
|
491 # Still no ID - make new user |
b3b04ffbecd8
user: fix password validation
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3818
diff
changeset
|
492 if not self.id: |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
493 self.id = self.make_id() |
3819
b3b04ffbecd8
user: fix password validation
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3818
diff
changeset
|
494 if password is not None: |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
495 self.enc_password = encodePassword(self._cfg, password) |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
496 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
497 # "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
|
498 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
|
499 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
|
500 else: |
1535
6a7dd84b091f
Fixed evil relative import.
Alexander Schremmer <alex AT alexanderweb DOT de>
parents:
1430
diff
changeset
|
501 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
|
502 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
|
503 |
689
ff56d9861a71
yet another i18n fix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
688
diff
changeset
|
504 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
|
505 self.language = 'en' |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
506 |
339 | 507 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
|
508 return "<%s.%s at 0x%x name:%r valid:%r>" % ( |
339 | 509 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
|
510 id(self), self.name, self.valid) |
339 | 511 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
512 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
|
513 """ 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
|
514 #!!! 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
|
515 # 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
|
516 # 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
|
517 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
|
518 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
|
519 |
b80624429934
added cfg.user_autocreate, for now for auth.http and auth.ssl_clientcert
Thomas Waldmann <tw@waldmann-edv.de>
parents:
232
diff
changeset
|
520 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
|
521 """ 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
|
522 |
b80624429934
added cfg.user_autocreate, for now for auth.http and auth.ssl_clientcert
Thomas Waldmann <tw@waldmann-edv.de>
parents:
232
diff
changeset
|
523 @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
|
524 """ |
4041
4a994a297ba3
replace cfg.user_autocreate setting by autocreate=<boolean> parameter of auth objects
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
3845
diff
changeset
|
525 if not self.valid and not self.disabled or changed: # do we need to save/update? |
4a994a297ba3
replace cfg.user_autocreate setting by autocreate=<boolean> parameter of auth objects
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
3845
diff
changeset
|
526 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
|
527 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
528 def __filename(self): |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
529 """ 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
|
530 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
531 @rtype: string |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
532 @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
|
533 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
534 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
|
535 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
536 def exists(self): |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
537 """ 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
|
538 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
539 @rtype: bool |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
540 @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
|
541 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
542 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
|
543 |
5939
24054d620fc1
moin account inactive - find, show, disable, remove inactive users
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5936
diff
changeset
|
544 def remove(self): |
24054d620fc1
moin account inactive - find, show, disable, remove inactive users
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5936
diff
changeset
|
545 """ Remove user profile from disk """ |
24054d620fc1
moin account inactive - find, show, disable, remove inactive users
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5936
diff
changeset
|
546 os.remove(self.__filename()) |
24054d620fc1
moin account inactive - find, show, disable, remove inactive users
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5936
diff
changeset
|
547 |
3808
8c5fbc62dd1d
user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
548 def load_from_id(self, password=None): |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
549 """ 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
|
550 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
551 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
|
552 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
553 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
|
554 those starting with an underscore. |
2286
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
555 |
3808
8c5fbc62dd1d
user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
556 @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
|
557 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
|
558 """ |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
559 if not self.exists(): |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
560 return |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
561 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
562 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
|
563 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
|
564 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
|
565 if line[0] == '#': |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
566 continue |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
567 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
568 try: |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
569 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
|
570 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
|
571 # 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
|
572 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
|
573 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
|
574 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
|
575 # 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
|
576 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
|
577 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
|
578 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
|
579 # 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
|
580 # 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
|
581 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
|
582 val = decodeList(val) |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
583 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
|
584 except ValueError: |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
585 pass |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
586 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
587 # 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
|
588 # 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
|
589 changed = 0 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
590 |
3808
8c5fbc62dd1d
user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
591 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
|
592 # Check for a valid password, possibly changing storage |
3819
b3b04ffbecd8
user: fix password validation
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3818
diff
changeset
|
593 valid, changed = self._validatePassword(user_data, password) |
1005
e1e1885deec1
whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
826
diff
changeset
|
594 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
|
595 return |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
596 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
597 # 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
|
598 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
|
599 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
|
600 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
|
601 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
602 # 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
|
603 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
|
604 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
|
605 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
606 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
|
607 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
608 # 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
|
609 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
|
610 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
|
611 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
|
612 delattr(self, attr) |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
613 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
|
614 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
615 # 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
|
616 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
|
617 try: |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
618 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
|
619 except ValueError: |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
620 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
|
621 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
622 # 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
|
623 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
|
624 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
|
625 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
626 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
|
627 self.valid = 1 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
628 |
3842
f40bd4c68aa2
MoinMoin.user: fix MoinMoinBugs/DuplicateNewUserNotification
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
629 # Mark this user as stored so saves don't send |
f40bd4c68aa2
MoinMoin.user: fix MoinMoinBugs/DuplicateNewUserNotification
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
630 # the "user created" event |
f40bd4c68aa2
MoinMoin.user: fix MoinMoinBugs/DuplicateNewUserNotification
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
631 self._stored = True |
2493
f3e3ffa68a7f
Send UserCreatedEvent from user.save(), not the newaccount action.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents:
2429
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 # 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
|
634 if changed: |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
635 self.save() |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
636 |
3819
b3b04ffbecd8
user: fix password validation
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3818
diff
changeset
|
637 def _validatePassword(self, data, password): |
3808
8c5fbc62dd1d
user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
638 """ |
8c5fbc62dd1d
user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
639 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
|
640 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
641 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
|
642 |
3808
8c5fbc62dd1d
user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
643 @param data: dict with user data (from storage) |
5239
90fae67c4cda
Fix SHA -> SSHA password hash upgrade for old user profiles (more details below).
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4491
diff
changeset
|
644 @param password: password to verify [unicode] |
3808
8c5fbc62dd1d
user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
645 @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
|
646 @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
|
647 """ |
8c5fbc62dd1d
user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
648 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
|
649 |
3808
8c5fbc62dd1d
user storage: hash stored passwords, upgrade on use, remove charset magic
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
650 # 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
|
651 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
|
652 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
|
653 |
3819
b3b04ffbecd8
user: fix password validation
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3818
diff
changeset
|
654 # require non empty password |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
655 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
|
656 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
|
657 |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
658 password_correct = recompute_hash = False |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
659 wanted_scheme = self._cfg.password_scheme |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
660 |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
661 # Check password and upgrade weak hashes to strong default algorithm: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
662 for scheme in config.password_schemes_supported: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
663 if epwd.startswith(scheme): |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
664 is_passlib = False |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
665 d = epwd[len(scheme):] |
5918
5126fadbf24f
password related code and tests - clean up and refactor
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5917
diff
changeset
|
666 |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
667 if scheme == '{PASSLIB}': |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
668 # a password hash to be checked by passlib library code |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
669 if not self._cfg.passlib_support: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
670 logging.error('in user profile %r, password hash with {PASSLIB} scheme encountered, but passlib_support is False' % (self.id, )) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
671 else: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
672 pwd_context = self._cfg.cache.pwd_context |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
673 try: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
674 password_correct = pwd_context.verify(password, d) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
675 except ValueError, err: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
676 # can happen for unknown scheme |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
677 logging.error('in user profile %r, verifying the passlib pw hash crashed [%s]' % (self.id, str(err))) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
678 if password_correct: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
679 # check if we need to recompute the hash. this is needed if either the |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
680 # passlib hash scheme / hash params changed or if we shall change to a |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
681 # builtin hash scheme (not recommended): |
5971
96ef8a8ecc80
improve some passlib related code using the 1.6.1-post-release doc updates
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5959
diff
changeset
|
682 recompute_hash = pwd_context.hash_needs_update(d) or wanted_scheme != '{PASSLIB}' |
5918
5126fadbf24f
password related code and tests - clean up and refactor
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5917
diff
changeset
|
683 |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
684 else: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
685 # a password hash to be checked by legacy, builtin code |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
686 if scheme == '{SSHA}': |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
687 d = base64.decodestring(d) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
688 salt = d[20:] |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
689 hash = hash_new('sha1', password.encode('utf-8')) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
690 hash.update(salt) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
691 enc = base64.encodestring(hash.digest() + salt).rstrip() |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
692 |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
693 elif scheme == '{SHA}': |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
694 enc = base64.encodestring( |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
695 hash_new('sha1', password.encode('utf-8')).digest()).rstrip() |
5720
69668ad0cae7
add support for other password hashes (thanks to Michael Foetsch)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5613
diff
changeset
|
696 |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
697 elif scheme == '{APR1}': |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
698 # d is of the form "$apr1$<salt>$<hash>" |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
699 salt = d.split('$')[2] |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
700 enc = md5crypt.apache_md5_crypt(password.encode('utf-8'), |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
701 salt.encode('ascii')) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
702 elif scheme == '{MD5}': |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
703 # d is of the form "$1$<salt>$<hash>" |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
704 salt = d.split('$')[2] |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
705 enc = md5crypt.unix_md5_crypt(password.encode('utf-8'), |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
706 salt.encode('ascii')) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
707 elif scheme == '{DES}': |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
708 if crypt is None: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
709 return False, False |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
710 # d is 2 characters salt + 11 characters hash |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
711 salt = d[:2] |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
712 enc = crypt.crypt(password.encode('utf-8'), salt.encode('ascii')) |
5918
5126fadbf24f
password related code and tests - clean up and refactor
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5917
diff
changeset
|
713 |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
714 else: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
715 logging.error('in user profile %r, password hash with unknown scheme encountered: %r' % (self.id, scheme)) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
716 raise NotImplementedError |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
717 |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
718 if safe_str_equal(epwd, scheme + enc): |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
719 password_correct = True |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
720 recompute_hash = scheme != wanted_scheme |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
721 |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
722 if recompute_hash: |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
723 data['enc_password'] = encodePassword(self._cfg, password) |
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
724 return password_correct, recompute_hash |
1005
e1e1885deec1
whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
826
diff
changeset
|
725 |
5918
5126fadbf24f
password related code and tests - clean up and refactor
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5917
diff
changeset
|
726 # unsupported algorithm |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
727 return False, False |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
728 |
1951
a05a3b447db5
interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1940
diff
changeset
|
729 def persistent_items(self): |
a05a3b447db5
interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1940
diff
changeset
|
730 """ 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
|
731 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
|
732 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
|
733 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
734 def save(self): |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
735 """ 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
|
736 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
737 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
|
738 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
|
739 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
740 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
|
741 return |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
742 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
743 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
|
744 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
|
745 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
|
746 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
747 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
|
748 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
749 # !!! 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
|
750 # 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
|
751 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
752 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
|
753 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
|
754 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
|
755 self.id)) |
1951
a05a3b447db5
interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1940
diff
changeset
|
756 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
|
757 attrs.sort() |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
758 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
|
759 # Encode list values |
a05a3b447db5
interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1940
diff
changeset
|
760 if isinstance(value, list): |
a05a3b447db5
interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1940
diff
changeset
|
761 key += '[]' |
a05a3b447db5
interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1940
diff
changeset
|
762 value = encodeList(value) |
a05a3b447db5
interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1940
diff
changeset
|
763 # Encode dict values |
a05a3b447db5
interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1940
diff
changeset
|
764 elif isinstance(value, dict): |
a05a3b447db5
interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1940
diff
changeset
|
765 key += '{}' |
a05a3b447db5
interwiki auth fixed, added getUserData xmlrpc method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1940
diff
changeset
|
766 value = encodeDict(value) |
5530
970d94ea19f2
user profile saving, eliminate lineseps in keys/values
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4480
diff
changeset
|
767 line = u"%s=%s" % (key, unicode(value)) |
970d94ea19f2
user profile saving, eliminate lineseps in keys/values
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4480
diff
changeset
|
768 line = line.replace('\n', ' ').replace('\r', ' ') # no lineseps |
970d94ea19f2
user profile saving, eliminate lineseps in keys/values
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4480
diff
changeset
|
769 data.write(line + '\n') |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
770 data.close() |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
771 |
6028
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
772 self.updateLookupCaches() |
3120
a7c1680aeaa0
PEP8 fixes, mostly whitespace
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
3103
diff
changeset
|
773 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
774 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
|
775 self.valid = 1 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
776 |
3842
f40bd4c68aa2
MoinMoin.user: fix MoinMoinBugs/DuplicateNewUserNotification
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
777 if not self._stored: |
f40bd4c68aa2
MoinMoin.user: fix MoinMoinBugs/DuplicateNewUserNotification
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3707
diff
changeset
|
778 self._stored = True |
2493
f3e3ffa68a7f
Send UserCreatedEvent from user.save(), not the newaccount action.
Karol 'grzywacz' Nowak <grzywacz@sul.uni.lodz.pl>
parents:
2429
diff
changeset
|
779 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
|
780 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
|
781 |
6021
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
782 # update page subscriber's cache after saving user preferences |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
783 self.updatePageSubCache() |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
784 |
89
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 # Time and date formatting |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
787 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
788 def getTime(self, tm): |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
789 """ 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
|
790 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
791 @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
|
792 @rtype: int |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
793 @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
|
794 """ |
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
|
795 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
|
796 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
797 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
798 def getFormattedDate(self, tm): |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
799 """ 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
|
800 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
801 @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
|
802 @rtype: string |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
803 @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
|
804 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
805 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
|
806 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
|
807 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
808 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
809 def getFormattedDateTime(self, tm): |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
810 """ 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
|
811 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
812 @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
|
813 @rtype: string |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
814 @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
|
815 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
816 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
|
817 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
|
818 |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
819 # ----------------------------------------------------------------- |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
820 # Bookmark |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
821 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
822 def setBookmark(self, tm): |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
823 """ Set bookmark timestamp. |
2286
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
824 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
825 @param tm: timestamp |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
826 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
827 if self.valid: |
4480
af8cea9bfcda
made cfg.interwikiname a unicode object (str only worked for ascii)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
3842
diff
changeset
|
828 interwikiname = self._cfg.interwikiname or u'' |
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
|
829 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
|
830 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
|
831 self.save() |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
832 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
833 def getBookmark(self): |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
834 """ Get bookmark timestamp. |
2286
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
835 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
836 @rtype: int |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
837 @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
|
838 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
839 bm = None |
4480
af8cea9bfcda
made cfg.interwikiname a unicode object (str only worked for ascii)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
3842
diff
changeset
|
840 interwikiname = self._cfg.interwikiname or u'' |
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
|
841 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
|
842 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
|
843 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
|
844 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
|
845 pass |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
846 return bm |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
847 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
848 def delBookmark(self): |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
849 """ 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
|
850 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
851 @rtype: int |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
852 @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
|
853 """ |
4480
af8cea9bfcda
made cfg.interwikiname a unicode object (str only worked for ascii)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
3842
diff
changeset
|
854 interwikiname = self._cfg.interwikiname or u'' |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
855 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
|
856 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
|
857 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
|
858 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
|
859 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
|
860 self.save() |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
861 return 0 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
862 return 1 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
863 |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
864 # ----------------------------------------------------------------- |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
865 # Subscribe |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
866 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
867 def getSubscriptionList(self): |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
868 """ 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
|
869 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
870 @rtype: list |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
871 @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
|
872 """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
873 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
|
874 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
875 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
|
876 """ 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
|
877 |
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
|
878 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
|
879 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
|
880 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
881 @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
|
882 @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
|
883 @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
|
884 """ |
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
|
885 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
|
886 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
|
887 |
e1e1885deec1
whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
826
diff
changeset
|
888 import re |
94
7f531b511f2e
fix isSubscribedTo when calling multiple times, for example from page.getSubscribersList()
Nir Soffer <nirs@freeshell.org>
parents:
90
diff
changeset
|
889 # 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
|
890 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
|
891 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
|
892 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
|
893 # 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
|
894 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
|
895 |
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
|
896 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
|
897 # 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
|
898 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
|
899 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
|
900 # 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
|
901 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
|
902 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
|
903 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
|
904 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
|
905 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
|
906 return True |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
907 |
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
|
908 return False |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
909 |
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
|
910 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
|
911 """ Subscribe to a wiki page. |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
912 |
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
|
913 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
|
914 page names are saved as interwiki names. |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
915 |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
916 @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
|
917 @type pagename: unicode |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
918 @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
|
919 @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
|
920 """ |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
921 if self._cfg.interwikiname: |
121
e61a09408702
fix name error in user.subscribe
Nir Soffer <nirs@freeshell.org>
parents:
94
diff
changeset
|
922 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
|
923 |
121
e61a09408702
fix name error in user.subscribe
Nir Soffer <nirs@freeshell.org>
parents:
94
diff
changeset
|
924 if pagename not in self.subscribed_pages: |
e61a09408702
fix name error in user.subscribe
Nir Soffer <nirs@freeshell.org>
parents:
94
diff
changeset
|
925 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
|
926 self.save() |
2286
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
927 |
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
|
928 # 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
|
929 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
|
930 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
|
931 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
|
932 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
|
933 |
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
|
934 return 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
|
935 |
246601c7b298
fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents:
89
diff
changeset
|
936 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
|
937 """ 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
|
938 |
246601c7b298
fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents:
89
diff
changeset
|
939 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
|
940 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
|
941 list. |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
942 |
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
|
943 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
|
944 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
|
945 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
|
946 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
|
947 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
|
948 |
246601c7b298
fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents:
89
diff
changeset
|
949 @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
|
950 @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
|
951 @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
|
952 @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
|
953 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
|
954 """ |
246601c7b298
fix unsubscribe, use always valid interwiki links, more correct error messages, refactror subscribePage, isSubscribedTo
Nir Soffer <nirs@freeshell.org>
parents:
89
diff
changeset
|
955 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
|
956 if pagename in self.subscribed_pages: |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
957 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
|
958 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
|
959 |
e1e1885deec1
whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
826
diff
changeset
|
960 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
|
961 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
|
962 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
|
963 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
|
964 |
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
|
965 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
|
966 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
|
967 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
|
968 |
6021
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
969 def updatePageSubCache(self): |
6028
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
970 """ When a user profile is saved, we update the page subscriber's cache """ |
6021
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
971 |
6024
ad461ba29a17
getSubscribers: fix: move the cache to "userdir" scope, update cleancache script
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6022
diff
changeset
|
972 scope, arena, key = 'userdir', 'users', 'pagesubscriptions' |
6021
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
973 |
6024
ad461ba29a17
getSubscribers: fix: move the cache to "userdir" scope, update cleancache script
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6022
diff
changeset
|
974 cache = caching.CacheEntry(self._request, arena=arena, key=key, scope=scope, use_pickle=True, do_locking=False) |
6021
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
975 if not cache.exists(): |
6022
fa5f81a0dfa9
getSubscribers: cleanups, optimizations, locking fix, .valid fix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6021
diff
changeset
|
976 return # if no cache file exists, just don't do anything |
6021
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
977 |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
978 cache.lock('w') |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
979 page_sub = cache.content() |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
980 |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
981 # we don't care about storing entries for users without any page subscriptions |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
982 if self.subscribed_pages: |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
983 page_sub[self.id] = { |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
984 'name': self.name, |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
985 'email': self.email, |
6022
fa5f81a0dfa9
getSubscribers: cleanups, optimizations, locking fix, .valid fix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6021
diff
changeset
|
986 'subscribed_pages': self.subscribed_pages, |
6021
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
987 } |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
988 elif page_sub.get(self.id): |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
989 del page_sub[self.id] |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
990 |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
991 cache.update(page_sub) |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
992 cache.unlock() |
54dc774ff49b
apply original patches from MoinMoinBugs/GetSubscribersSlow (as is)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5985
diff
changeset
|
993 |
6028
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
994 def updateLookupCaches(self): |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
995 """ When a user profile is saved, we update the userid lookup caches """ |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
996 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
997 scope, arena, key = 'userdir', 'users', 'lookup' |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
998 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
999 diskcache = caching.CacheEntry(self._request, arena=arena, key=key, scope=scope, use_pickle=True, do_locking=False) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1000 if not diskcache.exists(): |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1001 return # if no cache file exists, just don't do anything |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1002 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1003 diskcache.lock('w') |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1004 cache = diskcache.content() |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1005 userid = self.id |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1006 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1007 # first remove all old entries mapping to this userid: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1008 for attrname in CACHED_USER_ATTRS: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1009 attr2id = cache[attrname] |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1010 for key, value in attr2id.items(): |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1011 if value == userid: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1012 print "deleting old cached attr %s -> %s" % (key, value) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1013 del attr2id[key] |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1014 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1015 # then update with the current attr values: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1016 for attrname in CACHED_USER_ATTRS: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1017 if hasattr(self, attrname): |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1018 value = getattr(self, attrname) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1019 if value: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1020 # we do not store empty values, likely not unique |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1021 print "setting new cached attr %s -> %r" % (attrname, value) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1022 attr2id = cache[attrname] |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1023 if isinstance(value, list): |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1024 for val in value: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1025 attr2id[val] = userid |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1026 else: |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1027 attr2id[value] = userid |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1028 |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1029 setMemoryLookupCaches(self._request, cache) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1030 diskcache.update(cache) |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1031 diskcache.unlock() |
1893da1d5213
userid lookup caches: use 1 on-disk cache file, update cache rather than rebuild
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
6027
diff
changeset
|
1032 |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1033 # ----------------------------------------------------------------- |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1034 # Quicklinks |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1035 |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1036 def getQuickLinks(self): |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1037 """ 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
|
1038 |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1039 @rtype: list |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1040 @return: quicklinks from user account |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1041 """ |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1042 return self.quicklinks |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1043 |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1044 def isQuickLinkedTo(self, pagelist): |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1045 """ 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
|
1046 |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1047 @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
|
1048 @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
|
1049 @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
|
1050 """ |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1051 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
|
1052 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
|
1053 |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1054 for pagename in pagelist: |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1055 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
|
1056 return True |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1057 interWikiName = self._interWikiName(pagename) |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1058 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
|
1059 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
|
1060 |
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
|
1061 return False |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1062 |
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
|
1063 def addQuicklink(self, pagename): |
2286
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
1064 """ 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
|
1065 |
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
|
1066 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
|
1067 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
|
1068 |
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
|
1069 @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
|
1070 @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
|
1071 @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
|
1072 @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
|
1073 """ |
22
a47550d21d2d
quicklinks: avoid dupes, dont render as interwiki if wiki == self
Thomas Waldmann <tw@waldmann-edv.de>
parents:
8
diff
changeset
|
1074 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
|
1075 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
|
1076 if interWikiName: |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1077 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
|
1078 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
|
1079 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
|
1080 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
|
1081 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
|
1082 changed = True |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1083 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
|
1084 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
|
1085 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
|
1086 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
|
1087 |
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
|
1088 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
|
1089 self.save() |
22
a47550d21d2d
quicklinks: avoid dupes, dont render as interwiki if wiki == self
Thomas Waldmann <tw@waldmann-edv.de>
parents:
8
diff
changeset
|
1090 return changed |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1091 |
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
|
1092 def removeQuicklink(self, pagename): |
2286
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
1093 """ Remove a page from user quicklinks |
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
1094 |
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
|
1095 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
|
1096 |
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
|
1097 @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
|
1098 @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
|
1099 @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
|
1100 @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
|
1101 """ |
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
|
1102 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
|
1103 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
|
1104 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
|
1105 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
|
1106 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
|
1107 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
|
1108 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
|
1109 changed = True |
e1e1885deec1
whitespace-only cleanup, fix regex by using raw string
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
826
diff
changeset
|
1110 |
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
|
1111 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
|
1112 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
|
1113 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
|
1114 |
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
|
1115 def _interWikiName(self, pagename): |
2286
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
1116 """ 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
|
1117 |
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
|
1118 @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
|
1119 @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
|
1120 """ |
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
|
1121 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
|
1122 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
|
1123 |
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
|
1124 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
|
1125 |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1126 # ----------------------------------------------------------------- |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1127 # Trail |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1128 |
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
|
1129 def _wantTrail(self): |
4629
554e1d780e3b
fixed anon session detection, optimized trail code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4604
diff
changeset
|
1130 return (not self.valid and self._request.cfg.cookie_lifetime[0] # anon sessions enabled |
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
|
1131 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
|
1132 |
1956
477760dd8487
speedup addTrail by passing existing page object
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1951
diff
changeset
|
1133 def addTrail(self, page): |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1134 """ Add page to trail. |
2286
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
1135 |
1956
477760dd8487
speedup addTrail by passing existing page object
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1951
diff
changeset
|
1136 @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
|
1137 """ |
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
|
1138 if self._wantTrail(): |
1956
477760dd8487
speedup addTrail by passing existing page object
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1951
diff
changeset
|
1139 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
|
1140 # 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
|
1141 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
|
1142 return |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1143 |
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
|
1144 # 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
|
1145 if self._cfg.interwikiname: |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1146 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
|
1147 |
4629
554e1d780e3b
fixed anon session detection, optimized trail code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4604
diff
changeset
|
1148 trail = self._request.session.get('trail', []) |
5576
6b94d284ad11
avoid writing key/value to session dict if value doesn't change
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5538
diff
changeset
|
1149 trail_current = trail[:] |
4629
554e1d780e3b
fixed anon session detection, optimized trail code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4604
diff
changeset
|
1150 |
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
|
1151 # Don't append tail to trail ;) |
4629
554e1d780e3b
fixed anon session detection, optimized trail code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4604
diff
changeset
|
1152 if trail and trail[-1] == pagename: |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1153 return |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1154 |
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
|
1155 # Append new page, limiting the length |
4629
554e1d780e3b
fixed anon session detection, optimized trail code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4604
diff
changeset
|
1156 trail = [p for p in trail if p != pagename] |
554e1d780e3b
fixed anon session detection, optimized trail code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4604
diff
changeset
|
1157 pagename_stripped = pagename.strip() |
554e1d780e3b
fixed anon session detection, optimized trail code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4604
diff
changeset
|
1158 if pagename_stripped: |
554e1d780e3b
fixed anon session detection, optimized trail code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4604
diff
changeset
|
1159 trail.append(pagename_stripped) |
5576
6b94d284ad11
avoid writing key/value to session dict if value doesn't change
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5538
diff
changeset
|
1160 trail = trail[-self._cfg.trail_size:] |
6b94d284ad11
avoid writing key/value to session dict if value doesn't change
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5538
diff
changeset
|
1161 if trail != trail_current: |
6b94d284ad11
avoid writing key/value to session dict if value doesn't change
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5538
diff
changeset
|
1162 # we only modify the session if we have something different: |
6b94d284ad11
avoid writing key/value to session dict if value doesn't change
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5538
diff
changeset
|
1163 self._request.session['trail'] = trail |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1164 |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1165 def getTrail(self): |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1166 """ 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
|
1167 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1168 @rtype: list |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1169 @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
|
1170 """ |
4629
554e1d780e3b
fixed anon session detection, optimized trail code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4604
diff
changeset
|
1171 if 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
|
1172 trail = self._request.session.get('trail', []) |
4629
554e1d780e3b
fixed anon session detection, optimized trail code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4604
diff
changeset
|
1173 else: |
554e1d780e3b
fixed anon session detection, optimized trail code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4604
diff
changeset
|
1174 trail = [] |
554e1d780e3b
fixed anon session detection, optimized trail code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4604
diff
changeset
|
1175 return trail |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1176 |
89
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1177 # ----------------------------------------------------------------- |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1178 # Other |
4e44f6dfdfc2
user: formatting, move related methods together
Nir Soffer <nirs@freeshell.org>
parents:
88
diff
changeset
|
1179 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1180 def isCurrentUser(self): |
1963
de42f84ddb3c
user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1957
diff
changeset
|
1181 """ 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
|
1182 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
|
1183 |
448
45924beef130
user.isSuperUser() check, require cfg.superuser being a list or tuple
Thomas Waldmann <tw@waldmann-edv.de>
parents:
416
diff
changeset
|
1184 def isSuperUser(self): |
1963
de42f84ddb3c
user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1957
diff
changeset
|
1185 """ Check if this user is superuser """ |
4761
83390406fc5c
Fix isSuperUser(). See below for details.
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4629
diff
changeset
|
1186 if not self.valid: |
83390406fc5c
Fix isSuperUser(). See below for details.
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4629
diff
changeset
|
1187 return False |
1597
bbe187af4fc0
integrated MMDE (build scripts need more work)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1550
diff
changeset
|
1188 request = self._request |
4761
83390406fc5c
Fix isSuperUser(). See below for details.
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4629
diff
changeset
|
1189 if request.cfg.DesktopEdition and request.remote_addr == '127.0.0.1': |
1597
bbe187af4fc0
integrated MMDE (build scripts need more work)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1550
diff
changeset
|
1190 # 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
|
1191 return True |
bbe187af4fc0
integrated MMDE (build scripts need more work)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1550
diff
changeset
|
1192 superusers = request.cfg.superuser |
449
8ec16f62e989
Moved type check of the superuser setting.
Alexander Schremmer <alex@alexanderweb.de.tla>
parents:
448
diff
changeset
|
1193 assert isinstance(superusers, (list, tuple)) |
4761
83390406fc5c
Fix isSuperUser(). See below for details.
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4629
diff
changeset
|
1194 return 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
|
1195 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1196 def host(self): |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1197 """ Return user host """ |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1198 _ = self._request.getText |
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1199 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
|
1200 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
|
1201 |
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
|
1202 def wikiHomeLink(self): |
1963
de42f84ddb3c
user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1957
diff
changeset
|
1203 """ 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
|
1204 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
|
1205 """ |
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
|
1206 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
|
1207 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
|
1208 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
|
1209 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
|
1210 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
|
1211 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
|
1212 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
|
1213 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
|
1214 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
|
1215 |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1216 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
|
1217 """ 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
|
1218 |
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
|
1219 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
|
1220 Visitors return their host address. |
2286
01f05e74aa9c
Big PEP8 and whitespace cleanup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
2165
diff
changeset
|
1221 |
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
|
1222 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
|
1223 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
|
1224 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
|
1225 """ |
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
|
1226 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
|
1227 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
|
1228 else: |
0
77665d8e2254
tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0
Thomas Waldmann <tw-public@gmx.de>
parents:
diff
changeset
|
1229 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
|
1230 |
3567
ddf31f2ae8e3
use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3564
diff
changeset
|
1231 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
|
1232 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
|
1233 msg = str(int(time.time())) |
4363
817d99d715fe
remove direct usage of deprecated sha module - use hashlib, if possible
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
4107
diff
changeset
|
1234 h = hmac_new(key, msg).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
|
1235 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
|
1236 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
|
1237 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
|
1238 |
ddf31f2ae8e3
use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3564
diff
changeset
|
1239 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
|
1240 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
|
1241 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
|
1242 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
|
1243 try: |
ddf31f2ae8e3
use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3564
diff
changeset
|
1244 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
|
1245 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
|
1246 return False |
5985
0063e98b14aa
cfg.recovery_token_lifetime to determine how long the recovery token will be valid
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5971
diff
changeset
|
1247 lifetime = self._request.cfg.recovery_token_lifetime * 3600 |
0063e98b14aa
cfg.recovery_token_lifetime to determine how long the recovery token will be valid
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5971
diff
changeset
|
1248 if time.time() > stamp + lifetime: |
3567
ddf31f2ae8e3
use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3564
diff
changeset
|
1249 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
|
1250 # check hmac |
4491
eb377776ca34
user.apply_recovery_token: key must be of type string
Reimar Bauer <rb.proj AT googlemail DOT com>
parents:
4481
diff
changeset
|
1251 # key must be of type string |
eb377776ca34
user.apply_recovery_token: key must be of type string
Reimar Bauer <rb.proj AT googlemail DOT com>
parents:
4481
diff
changeset
|
1252 h = hmac_new(str(self.recoverpass_key), str(stamp)).hexdigest() |
5902
840ebd16ddd9
use a constant time str comparison function to prevent timing attacks
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5772
diff
changeset
|
1253 if not safe_str_equal(h, parts[1]): |
3567
ddf31f2ae8e3
use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3564
diff
changeset
|
1254 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
|
1255 self.recoverpass_key = "" |
5922
25900eaeb864
passlib integration - enhanced password hash security
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5918
diff
changeset
|
1256 self.enc_password = encodePassword(self._cfg, newpass) |
3567
ddf31f2ae8e3
use hmac and make recoverpass token only valid for 12 hours
Johannes Berg <johannes AT sipsolutions DOT net>
parents:
3564
diff
changeset
|
1257 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
|
1258 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
|
1259 |
5936
2d3352c547bc
moin account resetpw - misc. improvements
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5930
diff
changeset
|
1260 def mailAccountData(self, cleartext_passwd=None, |
2d3352c547bc
moin account resetpw - misc. improvements
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5930
diff
changeset
|
1261 subject=None, |
2d3352c547bc
moin account resetpw - misc. improvements
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
5930
diff
changeset
|
1262 text_intro=None, text_msg=None, text_data=None): |
1963
de42f84ddb3c
user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1957
diff
changeset
|
1263 """ 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
|
1264 him to login again. |
de42f84ddb3c
user: add some docstrings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
1957
diff
changeset
|
1265 """ |
750
f158c4e8fea2
moved mail related functions to MoinMoin.mail
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
737
diff
changeset
|
1266 from MoinMoin.mail import sendmail |
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@tric |