]>
git.ipfire.org Git - people/jschlag/pbs.git/blob - src/web/handlers_users.py
8 from .handlers_base
import *
10 class UserHandler(BaseHandler
):
11 @tornado.web
.authenticated
12 def get(self
, name
=None):
13 user
= self
.current_user
16 user
= self
.pakfire
.users
.get_by_name(name
)
18 raise tornado
.web
.HTTPError(404, "User does not exist: %s" % name
)
20 self
.render("user-profile.html", user
=user
)
23 class UserImpersonateHandler(BaseHandler
):
24 @tornado.web
.authenticated
26 action
= self
.get_argument("action", "start")
29 if self
.current_user
.session
:
30 self
.current_user
.session
.stop_impersonation()
34 # You must be an admin to do this.
35 if not self
.current_user
.is_admin():
36 raise tornado
.web
.HTTPError(403, "You are not allowed to do this.")
38 username
= self
.get_argument("user", "")
39 user
= self
.pakfire
.users
.get_by_name(username
)
41 raise tornado
.web
.HTTPError(404, "User not found: %s" % username
)
43 self
.render("user-impersonation.html", user
=user
)
45 @tornado.web
.authenticated
47 # You must be an admin to do this.
48 if not self
.current_user
.is_admin():
49 raise tornado
.web
.HTTPError(403, "You are not allowed to do this.")
51 username
= self
.get_argument("user")
52 user
= self
.pakfire
.users
.get_by_name(username
)
54 raise tornado
.web
.HTTPError(404, "User does not exist: %s" % username
)
56 if self
.current_user
.session
:
57 self
.current_user
.session
.start_impersonation(user
)
59 # Redirect to start page.
63 class UserActionHandler(BaseHandler
):
64 def get_user(self
, name
):
65 user
= self
.pakfire
.users
.get_by_name(name
)
67 raise tornado
.web
.HTTPError(404)
69 if not self
.current_user
== user
and not self
.current_user
.is_admin():
70 raise tornado
.web
.HTTPError(403)
75 class UserDeleteHandler(BaseHandler
):
76 @tornado.web
.authenticated
78 user
= self
.get_user(name
)
80 confirmed
= self
.get_argument("confirmed", None)
84 if self
.current_user
== user
:
85 self
.redirect("/logout")
87 self
.redirect("/users")
89 self
.render("user-delete.html", user
=user
)
92 class UserPasswdHandler(UserActionHandler
):
93 @tornado.web
.authenticated
94 def get(self
, name
, error_msg
=None):
95 user
= self
.get_user(name
)
97 self
.render("user-profile-passwd.html", user
=user
,
100 @tornado.web
.authenticated
101 def post(self
, name
):
102 _
= self
.locale
.translate
105 user
= self
.get_user(name
)
107 # If the user who wants to change the password is not an admin,
108 # he needs to provide the old password.
109 if not self
.current_user
.is_admin() or self
.current_user
== user
:
110 pass0
= self
.get_argument("pass0", None)
112 return self
.get(name
, error_msg
=_("You need to enter you current password."))
114 if not self
.current_user
.check_password(pass0
):
115 return self
.get(name
, error_msg
=_("The provided account password is wrong."))
117 pass1
= self
.get_argument("pass1", "")
118 pass2
= self
.get_argument("pass2", "")
122 # The password must at least have 8 characters.
123 if not pass1
== pass2
:
124 error_msg
= _("The given passwords do not match.")
125 elif len(pass1
) == 0:
126 error_msg
= _("The password was blank.")
128 accepted
, score
= backend
.users
.check_password_strength(pass1
)
130 error_msg
= _("The given password is too weak.")
133 return self
.get(name
, error_msg
=error_msg
)
135 # Update the password.
136 user
.set_passphrase(pass1
)
138 self
.render("user-profile-passwd-ok.html", user
=user
)
141 class UserEditHandler(BaseHandler
):
142 @tornado.web
.authenticated
144 user
= self
.pakfire
.users
.get_by_name(name
)
146 raise tornado
.web
.HTTPError(404)
148 if not self
.current_user
== user
and not self
.current_user
.is_admin():
149 raise tornado
.web
.HTTPError(403)
151 self
.render("user-profile-edit.html", user
=user
)
153 @tornado.web
.authenticated
154 def post(self
, name
):
155 _
= self
.locale
.translate
157 user
= self
.pakfire
.users
.get_by_name(name
)
159 raise tornado
.web
.HTTPError(404)
161 email
= self
.get_argument("email", user
.email
)
162 realname
= self
.get_argument("realname", user
.realname
)
163 pass1
= self
.get_argument("pass1", None)
164 pass2
= self
.get_argument("pass2", None)
165 locale
= self
.get_argument("locale", "")
167 # Only an admin can alter the state of a user.
168 if self
.current_user
.is_admin():
169 state
= self
.get_argument("state", user
.state
)
173 # Collect error messages
177 msgs
.append(_("No email address provided."))
178 elif not "@" in email
:
179 msgs
.append(_("Email address is invalid."))
181 # Check if the passphrase is okay.
182 if pass1
and not len(pass1
) >= 8:
183 msgs
.append(_("Password has less than 8 characters."))
184 elif not pass1
== pass2
:
185 msgs
.append(_("Passwords do not match."))
188 self
.render("user-profile-edit-fail.html", messages
=msgs
)
191 # Everything is okay, we can save the new settings.
194 user
.realname
= realname
196 user
.passphrase
= pass1
199 # Get the timezone settings.
200 tz
= self
.get_argument("timezone", None)
203 if not user
.activated
:
204 self
.render("user-profile-need-activation.html", user
=user
)
207 self
.redirect("/user/%s" % user
.name
)
210 class UsersHandler(BaseHandler
):
211 @tornado.web
.authenticated
213 users
= self
.pakfire
.users
.get_all()
215 self
.render("user-list.html", users
=users
)
218 class UsersBuildsHandler(BaseHandler
):
219 def get(self
, name
=None):
221 user
= self
.current_user
223 user
= self
.pakfire
.users
.get_by_name(name
)
225 raise tornado
.web
.HTTPError(404, "User not found: %s" % name
)
227 # Get a list of the builds this user has built.
228 builds
= self
.pakfire
.builds
.get_by_user(user
)
230 self
.render("user-profile-builds.html", user
=user
, builds
=builds
)