]>
git.ipfire.org Git - people/jschlag/pbs.git/blob - backend/users.py
13 class Users(base
.Object
):
14 def auth(self
, name
, passphrase
):
15 # If either name or passphrase is None, we don't check at all.
16 if None in (name
, passphrase
):
19 user
= self
.db
.get("""SELECT id FROM users WHERE name = %s
20 AND passphrase = SHA1(%s) AND activated = 'Y' AND deleted = 'N'""",
24 return User(self
.pakfire
, user
.id)
26 def register(self
, name
, passphrase
, email
, realname
, locale
=None):
27 return User
.new(self
.pakfire
, name
, passphrase
, email
, realname
, locale
)
29 def name_is_used(self
, name
):
30 users
= self
.db
.query("SELECT id FROM users WHERE name = %s", name
)
37 def email_is_used(self
, email
):
38 users
= self
.db
.query("SELECT id FROM users WHERE email = %s", email
)
46 users
= self
.db
.query("""SELECT id FROM users WHERE activated = 'Y' AND
47 deleted = 'N' ORDER BY realname, name""")
49 return [User(self
.pakfire
, u
.id) for u
in users
]
51 def get_by_id(self
, id):
52 user
= self
.db
.get("SELECT id FROM users WHERE id = %s LIMIT 1", id)
55 return User(self
.pakfire
, user
.id)
57 def get_by_name(self
, name
):
58 user
= self
.db
.get("SELECT id FROM users WHERE name = %s LIMIT 1", name
)
61 return User(self
.pakfire
, user
.id)
63 def get_by_email(self
, email
):
64 user
= self
.db
.get("SELECT id FROM users WHERE email = %s LIMIT 1", email
)
67 return User(self
.pakfire
, user
.id)
70 class User(base
.Object
):
71 def __init__(self
, pakfire
, id):
72 base
.Object
.__init
__(self
, pakfire
)
75 self
.data
= self
.db
.get("SELECT * FROM users WHERE id = %s" % self
.id)
77 def __cmp__(self
, other
):
78 return cmp(self
.id, other
.id)
81 def new(cls
, pakfire
, name
, passphrase
, email
, realname
, locale
=None):
83 id = pakfire
.db
.execute("""INSERT INTO users(name, passphrase, email, realname)
84 VALUES(%s, SHA1(%s), %s, %s)""", name
, passphrase
, email
, realname
)
86 user
= cls(pakfire
, id)
88 # If we have a guessed locale, we save it (for sending emails).
92 user
.send_activation_mail()
97 self
.db
.execute("UPDATE users SET deleted = 'Y' WHERE id = %s", self
.id)
100 self
.db
.execute("UPDATE users SET activated = 'Y' WHERE id = %s", self
.id)
102 def set_passphrase(self
, passphrase
):
104 Update the passphrase the users uses to log on.
106 self
.db
.execute("UPDATE users SET passphrase = SHA1(%s) WHERE id = %s",
109 passphrase
= property(lambda x
: None, set_passphrase
)
112 def activation_code(self
):
113 return self
.data
.activation_code
115 def get_realname(self
):
116 if not self
.data
.realname
:
119 return self
.data
.realname
121 def set_realname(self
, realname
):
122 self
.db
.execute("UPDATE users SET realname = %s WHERE id = %s",
124 self
.data
["realname"] = realname
126 realname
= property(get_realname
, set_realname
)
130 return self
.data
.name
133 return self
.data
.email
135 def set_email(self
, email
):
136 if email
== self
.email
:
139 self
.db
.execute("""UPDATE users SET email = %s, activated = 'N'
140 WHERE id = %s""", email
, self
.id)
147 # Inform the user, that he or she has to re-activate the account.
148 self
.send_activation_mail()
150 email
= property(get_email
, set_email
)
153 return self
.data
.state
155 def set_state(self
, state
):
156 self
.db
.execute("UPDATE users SET state = %s WHERE id = %s", state
,
158 self
.data
["state"] = state
160 state
= property(get_state
, set_state
)
162 def get_locale(self
):
163 return self
.data
.locale
or ""
165 def set_locale(self
, locale
):
166 self
.db
.execute("UPDATE users SET locale = %s WHERE id = %s", locale
,
168 self
.data
["locale"] = locale
170 locale
= property(get_locale
, set_locale
)
174 return self
.data
.activated
== "Y"
177 def registered(self
):
178 return self
.data
.registered
180 def gravatar_icon(self
, size
=128):
182 gravatar_url
= "http://www.gravatar.com/avatar/" + \
183 hashlib
.md5(self
.email
.lower()).hexdigest() + "?"
184 gravatar_url
+= urllib
.urlencode({'d': "mm", 's': str(size
)})
189 return self
.state
== "admin"
192 return self
.state
== "tester"
194 def send_activation_mail(self
):
195 logging
.debug("Sending activation mail to %s" % self
.email
)
197 # Generate a random activation code.
198 source
= string
.ascii_letters
+ string
.digits
199 self
.data
["activation_code"] = "".join(random
.sample(source
* 20, 20))
200 self
.db
.execute("UPDATE users SET activation_code = %s WHERE id = %s",
201 self
.activation_code
, self
.id)
203 # Get the saved locale from the user.
204 locale
= tornado
.locale
.get(self
.locale
)
207 subject
= _("Account Activation")
209 message
= _("You, or somebody using you email address, has registered an account on the Pakfire Build Service.")
211 message
+= _("To activate your account, please click on the link below.")
213 message
+= " http://pakfire.ipfire.org/user/%(name)s/activate/%(activation_code)s" \
214 % { "name" : self
.name
, "activation_code" : self
.activation_code
, }
216 message
+= "Sincerely,\n The Pakfire Build Service"
218 self
.pakfire
.messages
.add("%s <%s>" % (self
.realname
, self
.email
), subject
, message
)
221 def comments(self
, limit
=5):
222 comments
= self
.db
.query("""SELECT * FROM package_comments
223 WHERE user_id = %s ORDER BY time DESC LIMIT %s""", self
.id, limit
)
229 log
= self
.db
.query("SELECT * FROM log WHERE user_id = %s ORDER BY time DESC",