Esempio n. 1
0
def get_object(context, type_name, data):
    if context is None:
        logger.error('get_object %s: context not set, data: %s' %
                     (type_name, data))
    ident = data.get('_identifier')
    if ident is None:
        logger.warn('get_object %s: _identifier missing: %s' %
                    (type_name, data))
    type = adapted(context['concepts'][type_name])
    cont = type.conceptManager or 'concepts'
    name = (type.namePrefix or (type_name + '.')) + ident
    ob = context[cont].get(name)
    if ob:
        return adapted(ob)
    return None
Esempio n. 2
0
def create_object(context, type_name, data, includeOnly=None):
    logCreate = data.get('_log_create', True)
    ident = data.get('_identifier')
    type = adapted(context['concepts'][type_name])
    cont = type.conceptManager or 'concepts'
    name = (type.namePrefix or (type_name + '.')) + ident
    attrs = {}
    for attr, val in data.items():
        if attr.startswith('_'):
            continue
        if includeOnly is not None and attr not in includeOnly:
            continue
        if isinstance(val, Error):
            logger.warn('create_object error: %s: %s %s' % (ident, attr, val))
            return 'error'
        if val is not _invalid:
            attrs[attr] = val
    addAndConfigureObject(context[cont],
                          Concept,
                          name,
                          conceptType=baseObject(type),
                          **attrs)
    if logCreate:
        logger.info('create_object %s %s: %s' % (type_name, ident, attrs))
    return 'created'
Esempio n. 3
0
 def selectObjects(self, parts):
     result = []
     for c in baseObject(self.view.adapted).getChildren():
         obj = adapted(c)
         if IProject.providedBy(obj) or ITask.providedBy(obj):
             result.append(obj)
     return result
Esempio n. 4
0
 def sendTanEmail(self):
     if self.credentials is None:
         log.warn('credentials missing')
         return None
     person = None
     cred = self.credentials
     principal = getPrincipalFromCredentials(
                         self.context, self.request, cred)
     if principal is not None:
         person = adapted(getPersonForUser(
                         self.context, self.request, principal))
     if person is None:     # invalid credentials
         log.warn('invalid credentials: %s, %s' % (cred.login, cred.tan))
         # TODO: display message
         return None
     tan = self.credentials.tan
     recipient = getattr(person, 'tan_email', None) or person.email
     recipients = [recipient]
     lang = self.languageInfo.language
     subject = translate(_(u'tan_mail_subject'), target_language=lang)
     message = translate(_(u'tan_mail_text_$tan', mapping=dict(tan=tan)),
                         target_language=lang)
     senderInfo = self.globalOptions('email.sender')
     sender = senderInfo and senderInfo[0] or '*****@*****.**'
     sender = sender.encode('UTF-8')
     msg = MIMEText(message.encode('UTF-8'), 'plain', 'UTF-8')
     msg['Subject'] = subject.encode('UTF-8')
     msg['From'] = sender
     msg['To'] = ', '.join(recipients)
     mailhost = component.getUtility(IMailDelivery, 'Mail')
     mailhost.send(sender, recipients, msg.as_string())
     return recipient
Esempio n. 5
0
 def sendTanEmail(self):
     if self.credentials is None:
         return None
     person = None
     principal = getPrincipalFromCredentials(
                         self.context, self.request, self.credentials)
     if principal is not None:
         person = adapted(getPersonForUser(
                         self.context, self.request, principal))
     if person is None:     # invalid credentials
         # TODO: display message
         return None
     tan = self.credentials.tan
     recipient = person.email
     recipients = [recipient]
     lang = self.languageInfo.language
     subject = translate(_(u'tan_mail_subject'), target_language=lang)
     message = translate(_(u'tan_mail_text_$tan', mapping=dict(tan=tan)),
                         target_language=lang)
     senderInfo = self.globalOptions('email.sender')
     sender = senderInfo and senderInfo[0] or '*****@*****.**'
     sender = sender.encode('UTF-8')
     msg = MIMEText(message.encode('UTF-8'), 'plain', 'UTF-8')
     msg['Subject'] = subject.encode('UTF-8')
     msg['From'] = sender
     msg['To'] = ', '.join(recipients)
     mailhost = component.getUtility(IMailDelivery, 'Mail')
     mailhost.send(sender, recipients, msg.as_string())
     return recipient
Esempio n. 6
0
 def getSubTasks(self):
     if self.__is_dummy__:
         return []
     result = []
     for c in baseObject(self).getChildren():
         obj = adapted(c)
         if IProject.providedBy(obj) or ITask.providedBy(obj):
             result.append(obj)
     return result
Esempio n. 7
0
    def update(self):
        form = self.request.form
        if not form.get('action'):
            return True
        principal = self.request.principal
        if principal and principal.id != 'zope.anybody':
            return True
        formState = self.formState = self.validate(form)
        if formState.severity > 0:
            return True
        token = form.get('token')
        secret = jwk.JWK.from_pem(config.jwt_key)
        if token:
            if not self.validateToken(token, secret):
                fi = formState.fieldInstances['password']
                fi.setError('invalid_token', self.formErrors)
                formState.severity = max(formState.severity, fi.severity)
                return True
            header, claims = jwt.verify_jwt(token, secret, ['PS256'])
            username = claims.get('username')
            principal = getPrincipalForUsername(username, self.context,
                                                self.request)
            if not principal:
                fi = formState.fieldInstances['password']
                fi.setError('invalid_username', self.formErrors)
                formState.severity = max(formState.severity, fi.severity)
                return True
            pw = form.get('password')
            if not checkPassword(pw):
                fi = formState.fieldInstances['password']
                fi.setError('invalid_pw', self.formErrors)
                formState.severity = max(formState.severity, fi.severity)
                return True
            principal.setPassword(pw)
        else:
            username = form.get('username')
            principal = getPrincipalForUsername(username, self.context,
                                                self.request)
            person = getPersonForUser(self.context, self.request, principal)
            if not person:
                fi = formState.fieldInstances['username']
                fi.setError('invalid_username', self.formErrors)
                formState.severity = max(formState.severity, fi.severity)
                return True
            person = adapted(person)
            payload = dict(username=username)
            token = jwt.generate_jwt(payload, secret, 'PS256',
                                     timedelta(minutes=getattr(
                                         self, 'password_reset_period', 15)))
            addr = self.getMailAddress(person)
            if addr:
                recipients = [addr]
            else:
                fi = formState.fieldInstances['username']
                fi.setError('invalid_username', self.formErrors)
                formState.severity = max(formState.severity, fi.severity)
                return True
            lang = self.languageInfo.language
            try:
                domain = config.baseDomain
            except:
                domain = self.request.getHeader('HTTP_HOST')
            senderInfo = self.globalOptions('email.sender')
            sender = senderInfo and senderInfo[0] or '*****@*****.**'
            sender = sender.encode('UTF-8')
            self.sendPasswordResetMail(sender, recipients, self.getSubject(),
                                       self.getMessage(token))
            url = '%s?error_message=%s' % (self.url, self.reset_mail_message)
            self.request.response.redirect(url)
            return False

        url = '%s?error_message=%s' % (self.url, self.message)
        self.request.response.redirect(url)
        return False