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
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'
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
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
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
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
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