Esempio n. 1
0
  def editAlias(self, alias=None, *args, **kwargs):
    c = TemplateContext()

    # vary form depending on mode (do that over ajax)
    if alias is None:
      action = 'Adding'
      c.mode = 'add'

      domains = self.mf.getDomains()
      c.select_domains = []
      for d in domains:
        c.select_domains.append([d.dc, d.dc])

    elif not alias == '':
      try:
        ParamChecker.checkEmail('alias')
      except:
        raise HTTPRedirect('/mails/index')

      action = 'Editing'
      c.alias = alias
      c.mode = 'edit'
      try:
        alias = self.mf.getAlias(alias)
        mail = ''

        for m in alias.mail:
          if not mail == '':
            mail += '\n'
          if not m == alias.dn_mail:
            mail += m

        c.mail = mail

        maildrop = ''

        for m in alias.maildrop:
          if not maildrop == '':
            maildrop += '\n'
          if not m == alias.dn_mail and not m in maildrop:
            maildrop += m

        c.maildrop = maildrop

      except LookupError:
        # @TODO implement better handler
        msg = _('No such alias!')
        return self.index(msg=msg)
    else:
      raise HTTPRedirect('/mails/index')

    c.heading = '{0} alias'.format(action)

    return self.render('/mails/editAlias.mako', template_context=c)
Esempio n. 2
0
    def editAlias(self, alias=None, *args, **kwargs):
        c = TemplateContext()

        # vary form depending on mode (do that over ajax)
        if alias is None:
            action = "Adding"
            c.mode = "add"

            domains = self.mf.getDomains()
            c.select_domains = []
            for d in domains:
                c.select_domains.append([d.dc, d.dc])

        elif not alias == "":
            try:
                ParamChecker.checkEmail("alias")
            except:
                raise HTTPRedirect("/mails/index")

            action = "Editing"
            c.alias = alias
            c.mode = "edit"
            try:
                alias = self.mf.getAlias(alias)
                mail = ""

                for m in alias.mail:
                    if not mail == "":
                        mail += "\n"
                    if not m == alias.dn_mail:
                        mail += m

                c.mail = mail

                maildrop = ""

                for m in alias.maildrop:
                    if not maildrop == "":
                        maildrop += "\n"
                    if not m == alias.dn_mail and not m in maildrop:
                        maildrop += m

                c.maildrop = maildrop

            except LookupError:
                # @TODO implement better handler
                msg = _("No such alias!")
                return self.index(msg=msg)
        else:
            raise HTTPRedirect("/mails/index")

        c.heading = "{0} alias".format(action)

        return self.render("/mails/editAlias.mako", template_context=c)
Esempio n. 3
0
  def deleteAlias(self, alias, *args, **kwargs):
    try:
      ParamChecker.checkEmail('alias', param=True)
    except:
      raise HTTPRedirect('/mails/index')

    try:
      result = self.mf.deleteAlias(alias)

      if result:
        msg = _('Alias successfully deleted')
        msg_class = 'success'
      else:
        msg = _('Failed to delete alias!')
        msg_class = 'error'
    except:
      import sys, traceback
      traceback.print_exc(file=sys.stdout)
      msg = _('Failed to delete alias!')
      msg_class = 'error'

    return self.index(msg=msg, msg_class=msg_class)
Esempio n. 4
0
    def deleteAlias(self, alias, *args, **kwargs):
        try:
            ParamChecker.checkEmail("alias", param=True)
        except:
            raise HTTPRedirect("/mails/index")

        try:
            result = self.mf.deleteAlias(alias)

            if result:
                msg = _("Alias successfully deleted")
                msg_class = "success"
            else:
                msg = _("Failed to delete alias!")
                msg_class = "error"
        except:
            import sys, traceback

            traceback.print_exc(file=sys.stdout)
            msg = _("Failed to delete alias!")
            msg_class = "error"

        return self.index(msg=msg, msg_class=msg_class)
Esempio n. 5
0
    def check(self):
        errors = []
        checkOK = True

        try:
            ParamChecker.checkUsername(self.uid, param=False)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid username'))

        try:
            ParamChecker.checkString(self.sn,
                                     min_len=0,
                                     max_len=20,
                                     param=False)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid surname'))

        try:
            ParamChecker.checkString(self.givenName,
                                     min_len=0,
                                     max_len=20,
                                     param=False)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid given name'))

        try:
            ParamChecker.checkString(self.homePostalAddress,
                                     min_len=0,
                                     max_len=255,
                                     param=False)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid address'))
        '''optional'''
        try:
            ParamChecker.checkBool(self.isMinor, param=False, optional=True)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid selection for "is minor"'))
        '''optional'''
        try:
            ParamChecker.checkPhone(self.homePhone, param=False, optional=True)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(ipf.message)
        '''optional'''
        try:
            ParamChecker.checkPhone(self.mobile, param=False, optional=True)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid mobile number'))

        try:
            ParamChecker.checkEmail(self.mail, param=False)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(ipf.message)

        try:
            ParamChecker.checkString(self.loginShell,
                                     min_len=0,
                                     max_len=20,
                                     regex=regex.loginShell,
                                     param=False)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid login shell'))

        try:
            ParamChecker.checkDate(self.arrivalDate, param=False)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid "member since" date'))
        '''optional'''
        try:
            ParamChecker.checkDate(self.leavingDate,
                                   param=False,
                                   optional=True)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid "membership canceled" date'))
        '''optional'''
        try:
            ParamChecker.checkString(self.sshPublicKey,
                                     min_len=0,
                                     max_len=1200,
                                     regex=regex.sshKey,
                                     param=False,
                                     optional=True)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid SSH key'))
        '''optional'''
        try:
            ParamChecker.checkPGP(self.pgpKey, param=False, optional=True)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(ipf.message)
        '''optional'''
        try:
            ParamChecker.checkiButtonUID(self.iButtonUID,
                                         param=False,
                                         optional=True)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(ipf.message)

        try:
            ParamChecker.checkUsername(self.conventionSigner, param=False)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid convention signer'))
        '''optional'''
        try:
            ParamChecker.checkEmail(self.xmppID, param=False, optional=True)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid XMPP/Jabber/GTalk ID'))
        '''optional'''
        try:
            ParamChecker.checkBool(self.spaceKey, param=False, optional=True)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid Space-Key value'))
        '''optional'''
        try:
            ParamChecker.checkBool(self.npoMember, param=False, optional=True)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid NPO-Member value'))

        try:
            ParamChecker.checkCountryCode(self.nationality, param=False)
        except InvalidParameterFormat as ipf:
            checkOK = False
            errors.append(_('Invalid nationality'))

        if checkOK:
            return checkOK

        raise InvalidParameterFormat(errors)
Esempio n. 6
0
    def new_f(self, mode, alias, domain, mail=None, maildrop=None):
      formok = True
      errors = []
      items = {}

      if not mode in ['add', 'edit']:
        raise HTTPRedirect('/mails/index')

      if mode == 'add':
        try:
          ParamChecker.checkDomain('domain')
        except InvalidParameterFormat as ipf:
          formok = False
          errors.append(ipf.message)

        alias += '@' + domain

      domain = alias.split('@')[1]

      try:
        ParamChecker.checkDomain(domain, param=False)
      except InvalidParameterFormat as ipf:
        formok = False
        errors.append(ipf.message)

      # @TODO improve check
      try:
        ParamChecker.checkString('maildrop', min_len=0, max_len=300)
      except InvalidParameterFormat as ipf:
        formok = False
        errors.append(_('Invalid mail destination!'))

      if mail and not mail == '':
        for k in mail.split('\n'):
          m = k.replace('\r', '').replace(' ', '')
          if m == '':
            continue

          try:
            ParamChecker.checkEmail(m, param=False)
          except:
            formok = False
            break

          m_domain = m.split('@')[1]
          if not m_domain == domain:
            formok = False
            errors.append(_('All aliases need to be within the same domain!'))
            break

        if len(mail) > 300:
          formok = False

        if not formok:
          errors.append(_('Invalid related aliases!'))

      if not formok:
        self.session['errors'] = errors
        self.session['reqparams'] = {}

        # @TODO request.params may contain multiple values per key... test & fix
        for k in cherrypy.request.params.iterkeys():
          self.session['reqparams'][k] = cherrypy.request.params[k]

        self.session.save()

        if mode == 'edit':
          raise HTTPRedirect('/mails/editAlias/?alias={0}'.format(alias))
        else:
          raise HTTPRedirect('/mails/editAlias')
      else:
        items['mode'] = mode
        items['alias'] = alias
        items['mail'] = []
        items['maildrop'] = []

        if mail and len(mail) > 0:
          for k in mail.split('\n'):
            m = k.replace('\r', '').replace(' ', '')
            if m == '':
              continue

            items['mail'].append(m)

        if maildrop and len(maildrop) > 0:
          for k in maildrop.split('\n'):
            m = k.replace('\r', '').replace(' ', '')
            if m == '':
              continue

            items['maildrop'].append(m)

      return f(self, items)
Esempio n. 7
0
  def check(self):
    errors = []
    checkOK = True

    try:
      ParamChecker.checkUsername(self.uid, param=False)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid username'))

    try:
      ParamChecker.checkString(self.sn, min_len=0, max_len=20, param=False)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid surname'))

    try:
      ParamChecker.checkString(self.givenName, min_len=0, max_len=20, param=False)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid given name'))

    try:
      ParamChecker.checkString(self.homePostalAddress, min_len=0, max_len=255, param=False)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid address'))

    '''optional'''
    try:
      ParamChecker.checkBool(self.isMinor, param=False, optional=True)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid selection for "is minor"'))

    '''optional'''
    try:
      ParamChecker.checkPhone(self.homePhone, param=False, optional=True)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(ipf.message)

    '''optional'''
    try:
      ParamChecker.checkPhone(self.mobile, param=False, optional=True)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid mobile number'))

    try:
      ParamChecker.checkEmail(self.mail, param=False)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(ipf.message)

    try:
      ParamChecker.checkString(self.loginShell, min_len=0, max_len=20, regex=regex.loginShell, param=False)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid login shell'))

    try:
      ParamChecker.checkDate(self.arrivalDate, param=False)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid "member since" date'))

    '''optional'''
    try:
      ParamChecker.checkDate(self.leavingDate, param=False, optional=True)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid "membership canceled" date'))

    '''optional'''
    try:
      ParamChecker.checkString(self.sshPublicKey, min_len=0, max_len=1200, regex=regex.sshKey, param=False, optional=True)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid SSH key'))

    '''optional'''
    try:
      ParamChecker.checkPGP(self.pgpKey, param=False, optional=True)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(ipf.message)

    '''optional'''
    try:
      ParamChecker.checkiButtonUID(self.iButtonUID, param=False, optional=True)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(ipf.message)

    try:
      ParamChecker.checkUsername(self.conventionSigner, param=False)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid convention signer'))

    '''optional'''
    try:
      ParamChecker.checkEmail(self.xmppID, param=False, optional=True)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid XMPP/Jabber/GTalk ID'))

    '''optional'''
    try:
      ParamChecker.checkBool(self.spaceKey, param=False, optional=True)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid Space-Key value'))

    '''optional'''
    try:
      ParamChecker.checkBool(self.npoMember, param=False, optional=True)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid NPO-Member value'))

    try:
      ParamChecker.checkCountryCode(self.nationality, param=False)
    except InvalidParameterFormat as ipf:
      checkOK = False
      errors.append(_('Invalid nationality'))

    if checkOK:
      return checkOK

    raise InvalidParameterFormat(errors)
Esempio n. 8
0
        def new_f(self, mode, alias, domain, mail=None, maildrop=None):
            formok = True
            errors = []
            items = {}

            if not mode in ["add", "edit"]:
                raise HTTPRedirect("/mails/index")

            if mode == "add":
                try:
                    ParamChecker.checkDomain("domain")
                except InvalidParameterFormat as ipf:
                    formok = False
                    errors.append(ipf.message)

                alias += "@" + domain

            domain = alias.split("@")[1]

            try:
                ParamChecker.checkDomain(domain, param=False)
            except InvalidParameterFormat as ipf:
                formok = False
                errors.append(ipf.message)

            # @TODO improve check
            try:
                ParamChecker.checkString("maildrop", min_len=0, max_len=300)
            except InvalidParameterFormat as ipf:
                formok = False
                errors.append(_("Invalid mail destination!"))

            if mail and not mail == "":
                for k in mail.split("\n"):
                    m = k.replace("\r", "").replace(" ", "")
                    if m == "":
                        continue

                    try:
                        ParamChecker.checkEmail(m, param=False)
                    except:
                        formok = False
                        break

                    m_domain = m.split("@")[1]
                    if not m_domain == domain:
                        formok = False
                        errors.append(_("All aliases need to be within the same domain!"))
                        break

                if len(mail) > 300:
                    formok = False

                if not formok:
                    errors.append(_("Invalid related aliases!"))

            if not formok:
                self.session["errors"] = errors
                self.session["reqparams"] = {}

                # @TODO request.params may contain multiple values per key... test & fix
                for k in cherrypy.request.params.iterkeys():
                    self.session["reqparams"][k] = cherrypy.request.params[k]

                self.session.save()

                if mode == "edit":
                    raise HTTPRedirect("/mails/editAlias/?alias={0}".format(alias))
                else:
                    raise HTTPRedirect("/mails/editAlias")
            else:
                items["mode"] = mode
                items["alias"] = alias
                items["mail"] = []
                items["maildrop"] = []

                if mail and len(mail) > 0:
                    for k in mail.split("\n"):
                        m = k.replace("\r", "").replace(" ", "")
                        if m == "":
                            continue

                        items["mail"].append(m)

                if maildrop and len(maildrop) > 0:
                    for k in maildrop.split("\n"):
                        m = k.replace("\r", "").replace(" ", "")
                        if m == "":
                            continue

                        items["maildrop"].append(m)

            return f(self, items)