annotate MoinMoin/user.py @ 5134:f0eef1aecf88

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