|
|
b838e2 |
|
|
|
b838e2 |
import exception
|
|
|
b838e2 |
|
|
|
e5b0ac |
from page.page import Page
|
|
|
e5b0ac |
from page.repo import RepoPage, RepoCreatePage, RepoListPage
|
|
|
e5b0ac |
|
|
|
b838e2 |
|
|
|
b838e2 |
class UserCreatePage(Page):
|
|
|
b838e2 |
def process(self, request, path, prevpath):
|
|
|
b838e2 |
if path:
|
|
|
b838e2 |
raise exception.HttpNotFound()
|
|
|
b838e2 |
if not request.model.users.can_create():
|
|
|
b838e2 |
raise exception.HttpNotFound()
|
|
|
b838e2 |
answer = request.answer
|
|
|
b838e2 |
answer.chain_title( answer.te('Create user') )
|
|
|
b838e2 |
answer.content += '' + answer.te('Create user') + ' \n'
|
|
|
b838e2 |
answer.content += '<form method="post">\n'</form>
|
|
|
b838e2 |
answer.content += '<input name="action" type="hidden" value="user.create">\n'
|
|
|
b838e2 |
answer.content += '' + answer.te('login:') + ' <input name="login" type="text" value="' + answer.encodedfield('login') + '"> \n'
|
|
|
b838e2 |
answer.content += '' + answer.te('password:') + ' <input name="password" type="password"> \n'
|
|
|
b838e2 |
answer.content += '' + answer.te('retry password:') + ' <input name="passwordretry" type="password"> \n'
|
|
|
b838e2 |
answer.content += '' + answer.te('name:') + ' <input name="name" type="text" value="' + answer.encodedfield('name') + '"> \n'
|
|
|
b838e2 |
answer.content += '<input type="submit" value="' + answer.te('Submit') + '"> \n'
|
|
|
b838e2 |
answer.content += '\n'
|
|
|
b838e2 |
return answer.complete_content()
|
|
|
b838e2 |
|
|
|
b838e2 |
|
|
|
b838e2 |
class UserPage(Page):
|
|
|
b838e2 |
def __init__(self):
|
|
|
b838e2 |
super().__init__()
|
|
|
b838e2 |
self.profile = UserProfilePage()
|
|
|
b838e2 |
|
|
|
b838e2 |
def process(self, request, path, prevpath):
|
|
|
b838e2 |
if not path:
|
|
|
b838e2 |
raise exception.HttpNotFound()
|
|
|
b838e2 |
|
|
|
b838e2 |
user = None
|
|
|
b838e2 |
if path[0].isdecimal():
|
|
|
b838e2 |
user = request.model.users.get_by_id(int(path[0]))
|
|
|
b838e2 |
else:
|
|
|
b838e2 |
user = request.model.users.get_by_login(str(path[0]))
|
|
|
b838e2 |
if not user:
|
|
|
b838e2 |
raise exception.HttpNotFound()
|
|
|
b838e2 |
|
|
|
b838e2 |
request.answer.objects['user'] = user
|
|
|
e5b0ac |
request.answer.chain_title( request.answer.e(user.name) )
|
|
|
b838e2 |
return self.profile.sub_process(request, path, prevpath)
|
|
|
b838e2 |
|
|
|
b838e2 |
|
|
|
b838e2 |
class UserProfilePage(Page):
|
|
|
b838e2 |
def __init__(self):
|
|
|
b838e2 |
super().__init__()
|
|
|
b838e2 |
self.edit = UserUpdatePage()
|
|
|
b838e2 |
self.delete = UserDeletePage()
|
|
|
e5b0ac |
self.repo = RepoPage()
|
|
|
e5b0ac |
self.repo_create = RepoCreatePage()
|
|
|
e5b0ac |
self.repos = RepoListPage()
|
|
|
b838e2 |
|
|
|
b838e2 |
def process(self, request, path, prevpath):
|
|
|
b838e2 |
user = request.answer.objects['user']
|
|
|
b838e2 |
answer = request.answer
|
|
|
b838e2 |
answer.chain_title( answer.e(user.login) )
|
|
|
b838e2 |
|
|
|
b838e2 |
if path:
|
|
|
b838e2 |
if path[0] == 'edit':
|
|
|
b838e2 |
return self.edit.sub_process(request, path, prevpath)
|
|
|
b838e2 |
if path[0] == 'delete':
|
|
|
b838e2 |
return self.delete.sub_process(request, path, prevpath)
|
|
|
e5b0ac |
if path[0] == 'repo':
|
|
|
e5b0ac |
return self.repo.sub_process(request, path, prevpath)
|
|
|
e5b0ac |
if path[0] == 'repo_create':
|
|
|
e5b0ac |
return self.repo_create.sub_process(request, path, prevpath)
|
|
|
e5b0ac |
if path[0] == 'repos':
|
|
|
e5b0ac |
return self.repos.sub_process(request, path, prevpath)
|
|
|
b838e2 |
raise exception.HttpNotFound()
|
|
|
b838e2 |
|
|
|
e5b0ac |
can_update = user.can_update()
|
|
|
e5b0ac |
|
|
|
e5b0ac |
answer.content += '' + answer.te('User profile') + '\n'
|
|
|
b838e2 |
answer.content += '' + answer.e(user.login) + ' \n'
|
|
|
b838e2 |
answer.content += '' + answer.e(user.name) + ' \n'
|
|
|
b838e2 |
if user.superuser:
|
|
|
b838e2 |
answer.content += '' + answer.te('Site admin') + ' \n'
|
|
|
e5b0ac |
if can_update:
|
|
|
b838e2 |
answer.content += '' + self.make_link(answer, prevpath + ['edit'], 'Edit user') + ' \n'
|
|
|
e5b0ac |
|
|
|
e5b0ac |
answer.content += '' + self.make_link(answer, prevpath + ['repos'], 'Repositories') + ' \n'
|
|
|
e5b0ac |
|
|
|
b838e2 |
return answer.complete_content()
|
|
|
b838e2 |
|
|
|
b838e2 |
|
|
|
b838e2 |
class UserUpdatePage(Page):
|
|
|
b838e2 |
def process(self, request, path, prevpath):
|
|
|
b838e2 |
if path:
|
|
|
b838e2 |
raise exception.HttpNotFound()
|
|
|
b838e2 |
|
|
|
b838e2 |
answer = request.answer
|
|
|
b838e2 |
user = answer.objects['user']
|
|
|
b838e2 |
if not user.can_update():
|
|
|
b838e2 |
raise exception.HttpNotFound()
|
|
|
b838e2 |
|
|
|
b838e2 |
answer.chain_title( answer.te('Edit user') )
|
|
|
b838e2 |
answer.content += '' + answer.te('Edit user') + ' \n'
|
|
|
b838e2 |
answer.content += '' + answer.e(user.login) + ' \n'
|
|
|
b838e2 |
answer.content += '<form method="post">\n'</form>
|
|
|
b838e2 |
answer.content += '<input name="action" type="hidden" value="user.update">\n'
|
|
|
b838e2 |
answer.content += '<input name="user_id" type="hidden" value="' + answer.e(user.id) + '">\n'
|
|
|
b838e2 |
answer.content += '' + answer.te('name:') + ' <input name="name" type="text" value="' + answer.e(user.name) + '"> \n'
|
|
|
b838e2 |
answer.content += '<input type="submit" value="' + answer.te('Submit') + '"> \n'
|
|
|
b838e2 |
answer.content += '\n'
|
|
|
b838e2 |
|
|
|
b838e2 |
answer.content += '' + answer.te('Change password') + ' \n'
|
|
|
b838e2 |
answer.content += '<form method="post">\n'</form>
|
|
|
b838e2 |
answer.content += '<input name="action" type="hidden" value="user.setpassword">\n'
|
|
|
b838e2 |
answer.content += '<input name="user_id" type="hidden" value="' + answer.e(user.id) + '">\n'
|
|
|
b838e2 |
if user.id == request.model.myrights.user_id:
|
|
|
b838e2 |
answer.content += '' + answer.te('old password:') + ' <input name="oldpassword" type="password"> \n'
|
|
|
b838e2 |
answer.content += '' + answer.te('new password:') + ' <input name="newpassword" type="password"> \n'
|
|
|
b838e2 |
answer.content += '' + answer.te('new password retry:') + ' <input name="newpasswordretry" type="password"> \n'
|
|
|
b838e2 |
answer.content += '<input type="submit" value="' + answer.te('Submit') + '"> \n'
|
|
|
b838e2 |
answer.content += '\n'
|
|
|
b838e2 |
|
|
|
b838e2 |
if user.id != request.model.myrights.user_id and not user.superuser is None:
|
|
|
b838e2 |
answer.content += '' + answer.te('Global rights') + ' \n'
|
|
|
b838e2 |
answer.content += '<form method="post">\n'</form>
|
|
|
b838e2 |
answer.content += '<input name="action" type="hidden" value="user.setsuperuser">\n'
|
|
|
b838e2 |
answer.content += '<input name="user_id" type="hidden" value="' + answer.e(user.id) + '">\n'
|
|
|
b838e2 |
answer.content += '<input '="" '')="" ('="" +="" checked'="" else="" if="" name="superuser" type="checkbox" user.superuser=""> ' + answer.te('site admin') + ' \n'
|
|
|
b838e2 |
answer.content += '<input type="submit" value="' + answer.te('Submit') + '"> \n'
|
|
|
b838e2 |
answer.content += '\n'
|
|
|
b838e2 |
|
|
|
b838e2 |
if user.can_delete() and prevpath:
|
|
|
b838e2 |
answer.content += '' + answer.te('Deletion') + ' \n'
|
|
|
b838e2 |
answer.content += '<form action="' + request.get_urlpath_escaped(prevpath[:-1] + ['delete']) + '">\n'</form>
|
|
|
b838e2 |
answer.content += '<input type="submit" value="' + answer.te('Delete user') + '"> \n'
|
|
|
b838e2 |
answer.content += '\n'
|
|
|
b838e2 |
|
|
|
b838e2 |
return answer.complete_content()
|
|
|
b838e2 |
|
|
|
b838e2 |
|
|
|
b838e2 |
class UserDeletePage(Page):
|
|
|
b838e2 |
def process(self, request, path, prevpath):
|
|
|
b838e2 |
if path:
|
|
|
b838e2 |
raise exception.HttpNotFound()
|
|
|
b838e2 |
|
|
|
b838e2 |
answer = request.answer
|
|
|
b838e2 |
user = answer.objects['user']
|
|
|
b838e2 |
if not user.can_delete():
|
|
|
b838e2 |
raise exception.HttpNotFound()
|
|
|
b838e2 |
|
|
|
b838e2 |
answer.chain_title( answer.te('Delete user') )
|
|
|
b838e2 |
answer.content += '' + answer.te('Do you really want do delete user?') + ' \n'
|
|
|
b838e2 |
answer.content += '' + answer.e(user.id) + ' \n'
|
|
|
b838e2 |
answer.content += '' + answer.e(user.login) + ' \n'
|
|
|
b838e2 |
answer.content += '' + answer.e(user.name) + ' \n'
|
|
|
b838e2 |
answer.content += '<form action="' + request.get_urlpath_escaped([]) + '" method="post">\n'</form>
|
|
|
b838e2 |
answer.content += '<input name="action" type="hidden" value="user.delete">\n'
|
|
|
b838e2 |
answer.content += '<input name="user_id" type="hidden" value="' + answer.e(user.id) + '">\n'
|
|
|
b838e2 |
if user.id == request.model.myrights.user_id:
|
|
|
b838e2 |
answer.content += '' + answer.te('password to delete your account:') + ' <input name="password" type="password"> \n'
|
|
|
b838e2 |
answer.content += '<input type="submit" value="' + answer.te('Confirm delete') + '"> \n'
|
|
|
b838e2 |
answer.content += '\n'
|
|
|
b838e2 |
return answer.complete_content()
|
|
|
b838e2 |
|
|
|
b838e2 |
|
|
|
b838e2 |
class UserListPage(Page):
|
|
|
b838e2 |
def process(self, request, path, prevpath):
|
|
|
b838e2 |
if path:
|
|
|
b838e2 |
raise exception.HttpNotFound()
|
|
|
b838e2 |
if not prevpath:
|
|
|
b838e2 |
raise exception.HttpNotFound()
|
|
|
b838e2 |
if not request.model.users.can_list():
|
|
|
b838e2 |
raise exception.HttpNotFound()
|
|
|
b838e2 |
|
|
|
b838e2 |
users = request.model.users.get_list()
|
|
|
b838e2 |
|
|
|
b838e2 |
answer = request.answer
|
|
|
b838e2 |
answer.chain_title( answer.te('Users list') )
|
|
|
b838e2 |
answer.content += '' + answer.te('Users list') + ' \n'
|
|
|
b838e2 |
for user in users:
|
|
|
b838e2 |
url = request.get_urlpath_escaped(prevpath[:-1] + ['user', str(user.id)])
|
|
|
b838e2 |
answer.content += '' \
|
|
|
b838e2 |
+ answer.e(user.id) + ' ' \
|
|
|
b838e2 |
+ answer.e(user.login) + ' ' \
|
|
|
b838e2 |
+ answer.e(user.name) + '\n'
|
|
|
b838e2 |
|
|
|
b838e2 |
if request.model.users.can_create():
|
|
|
b838e2 |
answer.content += '' + self.make_link(answer, prevpath[:-1] + ['user_create'], 'Create user') + ' \n'
|
|
|
b838e2 |
|
|
|
b838e2 |
return answer.complete_content()
|
|
|
b838e2 |
|