Blame page/user.py

Ivan Mahonin b838e2
Ivan Mahonin b838e2
import exception
Ivan Mahonin 572081
from generator.form import Form
Ivan Mahonin b838e2
Ivan Mahonin e5b0ac
from page.page import Page
Ivan Mahonin e5b0ac
from page.repo import RepoPage, RepoCreatePage, RepoListPage
Ivan Mahonin e5b0ac
Ivan Mahonin b838e2
Ivan Mahonin b838e2
class UserCreatePage(Page):
Ivan Mahonin b838e2
  def process(self, request, path, prevpath):
Ivan Mahonin b838e2
    if path:
Ivan Mahonin b838e2
      raise exception.HttpNotFound()
Ivan Mahonin b838e2
    if not request.model.users.can_create():
Ivan Mahonin b838e2
      raise exception.HttpNotFound()
Ivan Mahonin b838e2
    answer = request.answer
Ivan Mahonin 572081
    
Ivan Mahonin 572081
    answer.add_uipath_entry( answer.t('Create user'), prevpath )
Ivan Mahonin 572081
    
Ivan Mahonin 572081
    form = Form(request)
Ivan Mahonin 572081
    form.begin('', 'user.create')
Ivan Mahonin 572081
    form.add_input('login:', 'login', 'text')
Ivan Mahonin 572081
    form.add_input('password:', 'password', 'password', '')
Ivan Mahonin 572081
    form.add_input('retry password:', 'passwordretry', 'password', '')
Ivan Mahonin 572081
    form.add_input('name:', 'name', 'text')
Ivan Mahonin 572081
    form.add_submit()
Ivan Mahonin 572081
    form.end()
Ivan Mahonin 572081
    answer.content += form.content
Ivan Mahonin 572081
Ivan Mahonin b838e2
    return answer.complete_content()
Ivan Mahonin b838e2
Ivan Mahonin b838e2
Ivan Mahonin b838e2
class UserPage(Page):
Ivan Mahonin b838e2
  def __init__(self):
Ivan Mahonin b838e2
    super().__init__()
Ivan Mahonin b838e2
    self.profile = UserProfilePage()
Ivan Mahonin b838e2
    
Ivan Mahonin b838e2
  def process(self, request, path, prevpath):
Ivan Mahonin b838e2
    if not path:
Ivan Mahonin b838e2
      raise exception.HttpNotFound()
Ivan Mahonin b838e2
Ivan Mahonin b838e2
    user = None
Ivan Mahonin 572081
    user = request.model.users.get_by_login(str(path[0]))
Ivan Mahonin b838e2
    if not user:
Ivan Mahonin b838e2
      raise exception.HttpNotFound()
Ivan Mahonin b838e2
Ivan Mahonin 572081
    answer = request.answer
Ivan Mahonin 572081
Ivan Mahonin 572081
    answer.objects['user'] = user
Ivan Mahonin 572081
    answer.add_uipath_entry( user.name, prevpath + [user.login] )
Ivan Mahonin b838e2
    return self.profile.sub_process(request, path, prevpath)
Ivan Mahonin b838e2
Ivan Mahonin b838e2
Ivan Mahonin b838e2
class UserProfilePage(Page):
Ivan Mahonin b838e2
  def __init__(self):
Ivan Mahonin b838e2
    super().__init__()
Ivan Mahonin b838e2
    self.edit = UserUpdatePage()
Ivan Mahonin b838e2
    self.delete = UserDeletePage()
Ivan Mahonin e5b0ac
    self.repo = RepoPage()
Ivan Mahonin e5b0ac
    self.repo_create = RepoCreatePage()
Ivan Mahonin e5b0ac
    self.repos = RepoListPage()
Ivan Mahonin b838e2
Ivan Mahonin b838e2
  def process(self, request, path, prevpath):
Ivan Mahonin b838e2
    user = request.answer.objects['user']
Ivan Mahonin b838e2
    answer = request.answer
Ivan Mahonin b838e2
Ivan Mahonin b838e2
    if path:
Ivan Mahonin b838e2
      if path[0] == 'edit':
Ivan Mahonin b838e2
        return self.edit.sub_process(request, path, prevpath)
Ivan Mahonin b838e2
      if path[0] == 'delete':
Ivan Mahonin b838e2
        return self.delete.sub_process(request, path, prevpath)
Ivan Mahonin e5b0ac
      if path[0] == 'repo':
Ivan Mahonin e5b0ac
        return self.repo.sub_process(request, path, prevpath)
Ivan Mahonin e5b0ac
      if path[0] == 'repo_create':
Ivan Mahonin e5b0ac
        return self.repo_create.sub_process(request, path, prevpath)
Ivan Mahonin e5b0ac
      if path[0] == 'repos':
Ivan Mahonin e5b0ac
        return self.repos.sub_process(request, path, prevpath)
Ivan Mahonin b838e2
      raise exception.HttpNotFound()
Ivan Mahonin b838e2
Ivan Mahonin b838e2
    answer.content += '

' + answer.e(user.login) + '

\n'
Ivan Mahonin b838e2
    answer.content += '

' + answer.e(user.name) + '

\n'
Ivan Mahonin e146e6
    if user.get_superuser():
Ivan Mahonin b838e2
      answer.content += '

' + answer.te('Site admin') + '

\n'
Ivan Mahonin 572081
    if user.can_update():
Ivan Mahonin b838e2
      answer.content += '

' + self.make_link(answer, prevpath + ['edit'], 'Edit user') + '

\n'
Ivan Mahonin e5b0ac
Ivan Mahonin e5b0ac
    answer.content += '

' + self.make_link(answer, prevpath + ['repos'], 'Repositories') + '

\n'
Ivan Mahonin e5b0ac
Ivan Mahonin b838e2
    return answer.complete_content()
Ivan Mahonin b838e2
Ivan Mahonin b838e2
Ivan Mahonin b838e2
class UserUpdatePage(Page):
Ivan Mahonin b838e2
  def process(self, request, path, prevpath):
Ivan Mahonin b838e2
    if path:
Ivan Mahonin b838e2
      raise exception.HttpNotFound()
Ivan Mahonin b838e2
Ivan Mahonin b838e2
    answer = request.answer
Ivan Mahonin b838e2
    user = answer.objects['user']
Ivan Mahonin b838e2
    if not user.can_update():
Ivan Mahonin b838e2
      raise exception.HttpNotFound()
Ivan Mahonin b838e2
    
Ivan Mahonin 572081
    answer.add_uipath_entry( answer.t('Edit user'), prevpath )
Ivan Mahonin 572081
Ivan Mahonin 572081
    form = Form(request)
Ivan Mahonin 572081
    form.begin('Profile', 'user.update')
Ivan Mahonin 572081
    form.add_hidden('user_id', user.id)
Ivan Mahonin 572081
    form.add_input('name:', 'name', 'name', user.name)
Ivan Mahonin 572081
    form.add_submit()
Ivan Mahonin 572081
    form.end()
Ivan Mahonin 572081
    answer.content += form.content
Ivan Mahonin b838e2
    
Ivan Mahonin 572081
    form = Form(request)
Ivan Mahonin 572081
    form.begin('Change password', 'user.setpassword')
Ivan Mahonin 572081
    form.add_hidden('user_id', user.id)
Ivan Mahonin b838e2
    if user.id == request.model.myrights.user_id:
Ivan Mahonin 572081
      form.add_input('old password:', 'oldpassword', 'password', '')
Ivan Mahonin 572081
    form.add_input('new password:', 'newpassword', 'password', '')
Ivan Mahonin 572081
    form.add_input('new password retry:', 'newpasswordretry', 'password', '')
Ivan Mahonin 572081
    form.add_submit()
Ivan Mahonin 572081
    form.end()
Ivan Mahonin 572081
    answer.content += form.content
Ivan Mahonin 9e1462
Ivan Mahonin 9e1462
    sslcerts = request.model.sslcerts.get_list(user)
Ivan Mahonin 9e1462
    for sslcert in sslcerts:
Ivan Mahonin 9e1462
      maxlen = 64
Ivan Mahonin 9e1462
      data = sslcert.data
Ivan Mahonin 9e1462
      html_lines = list()
Ivan Mahonin 9e1462
      while data:
Ivan Mahonin 9e1462
        html_lines.append( answer.e(data[0:maxlen]) )
Ivan Mahonin 9e1462
        data = data[maxlen:]
Ivan Mahonin 9e1462
      form = Form(request)
Ivan Mahonin 9e1462
      form.begin('Client SSL certificate', 'sslcert.delete')
Ivan Mahonin 9e1462
      form.add_hidden('sslcert_id', sslcert.id)
Ivan Mahonin 9e1462
      form.add_field_raw('data:', '
'.join(html_lines))
Ivan Mahonin 9e1462
      form.add_submit('Delete')
Ivan Mahonin 9e1462
      form.end()
Ivan Mahonin 9e1462
      answer.content += form.content
Ivan Mahonin 9e1462
Ivan Mahonin 9e1462
    form = Form(request)
Ivan Mahonin 9e1462
    form.begin('Add client SSL certificate', 'sslcert.create')
Ivan Mahonin 9e1462
    form.add_hidden('user_id', user.id)
Ivan Mahonin 9e1462
    form.add_textarea('data:', 'data')
Ivan Mahonin 9e1462
    form.add_submit()
Ivan Mahonin 9e1462
    form.end()
Ivan Mahonin 9e1462
    answer.content += form.content
Ivan Mahonin 9e1462
Ivan Mahonin e146e6
    if user.id != request.model.myrights.user_id and not user.get_superuser() is None:
Ivan Mahonin 572081
      form = Form(request)
Ivan Mahonin 572081
      form.begin('Global rights', 'user.setsuperuser')
Ivan Mahonin 572081
      form.add_hidden('user_id', user.id)
Ivan Mahonin e146e6
      form.add_checkbox('site admin:', 'superuser', user.get_superuser())
Ivan Mahonin 572081
      form.add_submit()
Ivan Mahonin 572081
      form.end()
Ivan Mahonin 572081
      answer.content += form.content
Ivan Mahonin b838e2
Ivan Mahonin b838e2
    if user.can_delete() and prevpath:
Ivan Mahonin 572081
      url = request.get_urlpath_escaped(prevpath[:-1] + ['delete'])
Ivan Mahonin 572081
      form = Form(request)
Ivan Mahonin 572081
      form.content += '<form method="GET" action="' + url + '">' + form.GROUP_BEGIN
Ivan Mahonin 572081
      form.content += form.title('Deletion')
Ivan Mahonin 572081
      form.add_submit('Delete user')
Ivan Mahonin 572081
      form.end()
Ivan Mahonin 572081
      answer.content += form.content
Ivan Mahonin b838e2
Ivan Mahonin b838e2
    return answer.complete_content()
Ivan Mahonin b838e2
Ivan Mahonin b838e2
Ivan Mahonin b838e2
class UserDeletePage(Page):
Ivan Mahonin b838e2
  def process(self, request, path, prevpath):
Ivan Mahonin b838e2
    if path:
Ivan Mahonin b838e2
      raise exception.HttpNotFound()
Ivan Mahonin b838e2
Ivan Mahonin b838e2
    answer = request.answer
Ivan Mahonin b838e2
    user = answer.objects['user']
Ivan Mahonin b838e2
    if not user.can_delete():
Ivan Mahonin b838e2
      raise exception.HttpNotFound()
Ivan Mahonin b838e2
Ivan Mahonin 572081
    answer.add_uipath_entry( answer.t('Delete user'), prevpath )
Ivan Mahonin 572081
Ivan Mahonin 572081
    form = Form(request)
Ivan Mahonin 572081
    form.begin('', 'user.delete')
Ivan Mahonin 572081
    form.add_hidden('user_id', user.id)
Ivan Mahonin 572081
    form.content += '

' + answer.e(user.login) + '

\n'
Ivan Mahonin 572081
    form.content += '

' + answer.e(user.name) + '

\n'
Ivan Mahonin 572081
    form.content += '

' + answer.te('Do you really want do delete user?') + '

\n'
Ivan Mahonin b838e2
    if user.id == request.model.myrights.user_id:
Ivan Mahonin 572081
      form.add_input('password to delete your account:', 'password', 'password', '')
Ivan Mahonin 572081
    form.add_submit('Confirm delete')
Ivan Mahonin 572081
    form.end()
Ivan Mahonin 572081
    answer.content += form.content
Ivan Mahonin 572081
Ivan Mahonin b838e2
    return answer.complete_content()
Ivan Mahonin b838e2
Ivan Mahonin b838e2
Ivan Mahonin b838e2
class UserListPage(Page):
Ivan Mahonin b838e2
  def process(self, request, path, prevpath):
Ivan Mahonin b838e2
    if path:
Ivan Mahonin b838e2
      raise exception.HttpNotFound()
Ivan Mahonin b838e2
    if not prevpath:
Ivan Mahonin b838e2
      raise exception.HttpNotFound()
Ivan Mahonin b838e2
    if not request.model.users.can_list():
Ivan Mahonin b838e2
      raise exception.HttpNotFound()
Ivan Mahonin b838e2
    
Ivan Mahonin b838e2
    users = request.model.users.get_list()
Ivan Mahonin b838e2
    
Ivan Mahonin b838e2
    answer = request.answer
Ivan Mahonin 572081
    answer.add_uipath_entry( answer.t('Users list'), prevpath )
Ivan Mahonin 572081
Ivan Mahonin b838e2
    for user in users:
Ivan Mahonin 572081
      url = request.get_urlpath_escaped(prevpath[:-1] + ['user', str(user.login)])
Ivan Mahonin b838e2
      answer.content += '

' \

Ivan Mahonin b838e2
                     + answer.e(user.login) + ' ' \
Ivan Mahonin b838e2
                     + answer.e(user.name) + '

\n'
Ivan Mahonin b838e2
Ivan Mahonin b838e2
    if request.model.users.can_create():
Ivan Mahonin b838e2
      answer.content += '

' + self.make_link(answer, prevpath[:-1] + ['user_create'], 'Create user') + '

\n'
Ivan Mahonin b838e2
Ivan Mahonin b838e2
    return answer.complete_content()
Ivan Mahonin b838e2