def requestToken(self, emailAddress, clientSecret, sendAttempt, nextLink, ipaddress=None): valSessionStore = ThreePidValSessionStore(self.sydent) valSession = valSessionStore.getOrCreateTokenSession(medium='email', address=emailAddress, clientSecret=clientSecret) valSessionStore.setMtime(valSession.id, time_msec()) if int(valSession.sendAttemptNumber) >= int(sendAttempt): logger.info("Not mailing code because current send attempt (%d) is not less than given send attempt (%s)", int(sendAttempt), int(valSession.sendAttemptNumber)) return valSession.id ipstring = ipaddress if ipaddress else u"an unknown location" substitutions = { 'ipaddress': ipstring, 'link': self.makeValidateLink(valSession, clientSecret, nextLink), 'token': valSession.token, } logger.info( "Attempting to mail code %s (nextLink: %s) to %s", valSession.token, nextLink, emailAddress, ) sendEmail(self.sydent, 'email.template', emailAddress, substitutions) valSessionStore.setSendAttemptNumber(valSession.id, sendAttempt) return valSession.id
def requestToken(self, phoneNumber, clientSecret, sendAttempt, nextLink): valSessionStore = ThreePidValSessionStore(self.sydent) msisdn = phonenumbers.format_number( phoneNumber, phonenumbers.PhoneNumberFormat.E164 )[1:] valSession = valSessionStore.getOrCreateTokenSession( medium='msisdn', address=msisdn, clientSecret=clientSecret ) valSessionStore.setMtime(valSession.id, time_msec()) if int(valSession.sendAttemptNumber) >= int(sendAttempt): logger.info("Not texting code because current send attempt (%d) is not less than given send attempt (%s)", int(sendAttempt), int(valSession.sendAttemptNumber)) return valSession.id smsBodyTemplate = self.sydent.cfg.get('sms', 'bodyTemplate') originator = self.getOriginator(phoneNumber) logger.info( "Attempting to text code %s to %s (country %d) with originator %s", valSession.token, msisdn, phoneNumber.country_code, originator ) smsBody = smsBodyTemplate.format(token=valSession.token) self.omSms.sendTextSMS(smsBody, msisdn, originator) valSessionStore.setSendAttemptNumber(valSession.id, sendAttempt) return valSession.id
async def requestToken( self, phoneNumber: phonenumbers.PhoneNumber, clientSecret: str, send_attempt: int, brand: Optional[str] = None, ) -> int: """ Creates or retrieves a validation session and sends an text message to the corresponding phone number address with a token to use to verify the association. :param phoneNumber: The phone number to send the email to. :param clientSecret: The client secret to use. :param send_attempt: The current send attempt. :param brand: A hint at a brand from the request. :return: The ID of the session created (or of the existing one if any) """ if str(phoneNumber.country_code) in self.smsRules: action = self.smsRules[str(phoneNumber.country_code)] if action == "reject": raise DestinationRejectedException() valSessionStore = ThreePidValSessionStore(self.sydent) msisdn = phonenumbers.format_number( phoneNumber, phonenumbers.PhoneNumberFormat.E164)[1:] valSession, token_info = valSessionStore.getOrCreateTokenSession( medium="msisdn", address=msisdn, clientSecret=clientSecret) valSessionStore.setMtime(valSession.id, time_msec()) if token_info.send_attempt_number >= send_attempt: logger.info( "Not texting code because current send attempt (%d) is not less than given send attempt (%s)", send_attempt, token_info.send_attempt_number, ) return valSession.id smsBodyTemplate = self.sydent.config.sms.body_template originator = self.getOriginator(phoneNumber) logger.info( "Attempting to text code %s to %s (country %d) with originator %s", token_info.token, msisdn, phoneNumber.country_code, originator, ) smsBody = smsBodyTemplate.format(token=token_info.token) await self.omSms.sendTextSMS(smsBody, msisdn, originator) valSessionStore.setSendAttemptNumber(valSession.id, send_attempt) return valSession.id
def requestToken(self, emailAddress, clientSecret, sendAttempt, nextLink, ipaddress=None): """ Creates or retrieves a validation session and sends an email to the corresponding email address with a token to use to verify the association. :param emailAddress: The email address to send the email to. :type emailAddress: unicode :param clientSecret: The client secret to use. :type clientSecret: unicode :param sendAttempt: The current send attempt. :type sendAttempt: int :param nextLink: The link to redirect the user to once they have completed the validation. :type nextLink: unicode :param ipaddress: The requester's IP address. :type ipaddress: str or None :return: The ID of the session created (or of the existing one if any) :rtype: int """ valSessionStore = ThreePidValSessionStore(self.sydent) valSession = valSessionStore.getOrCreateTokenSession( medium=u'email', address=emailAddress, clientSecret=clientSecret) valSessionStore.setMtime(valSession.id, time_msec()) if int(valSession.sendAttemptNumber) >= int(sendAttempt): logger.info( "Not mailing code because current send attempt (%d) is not less than given send attempt (%s)", int(sendAttempt), int(valSession.sendAttemptNumber)) return valSession.id ipstring = ipaddress if ipaddress else u"an unknown location" substitutions = { 'ipaddress': ipstring, 'link': self.makeValidateLink(valSession, clientSecret, nextLink), 'token': valSession.token, } logger.info( "Attempting to mail code %s (nextLink: %s) to %s", valSession.token, nextLink, emailAddress, ) sendEmail(self.sydent, 'email.template', emailAddress, substitutions) valSessionStore.setSendAttemptNumber(valSession.id, sendAttempt) return valSession.id
def requestToken(self, phoneNumber, clientSecret, sendAttempt, brand=None): """ Creates or retrieves a validation session and sends an text message to the corresponding phone number address with a token to use to verify the association. :param phoneNumber: The phone number to send the email to. :type phoneNumber: phonenumbers.PhoneNumber :param clientSecret: The client secret to use. :type clientSecret: unicode :param sendAttempt: The current send attempt. :type sendAttempt: int :param brand: A hint at a brand from the request. :type brand: str or None :return: The ID of the session created (or of the existing one if any) :rtype: int """ if str(phoneNumber.country_code) in self.smsRules: action = self.smsRules[str(phoneNumber.country_code)] if action == 'reject': raise DestinationRejectedException() valSessionStore = ThreePidValSessionStore(self.sydent) msisdn = phonenumbers.format_number( phoneNumber, phonenumbers.PhoneNumberFormat.E164 )[1:] valSession = valSessionStore.getOrCreateTokenSession( medium='msisdn', address=msisdn, clientSecret=clientSecret ) valSessionStore.setMtime(valSession.id, time_msec()) if int(valSession.sendAttemptNumber) >= int(sendAttempt): logger.info("Not texting code because current send attempt (%d) is not less than given send attempt (%s)", int(sendAttempt), int(valSession.sendAttemptNumber)) return valSession.id smsBodyTemplate = self.sydent.cfg.get('sms', 'bodyTemplate') originator = self.getOriginator(phoneNumber) logger.info( "Attempting to text code %s to %s (country %d) with originator %s", valSession.token, msisdn, phoneNumber.country_code, originator ) smsBody = smsBodyTemplate.format(token=valSession.token) self.omSms.sendTextSMS(smsBody, msisdn, originator) valSessionStore.setSendAttemptNumber(valSession.id, sendAttempt) return valSession.id
def requestToken(self, emailAddress, clientSecret, sendAttempt, nextLink, ipaddress=None): valSessionStore = ThreePidValSessionStore(self.sydent) valSession = valSessionStore.getOrCreateTokenSession( medium='email', address=emailAddress, clientSecret=clientSecret) valSessionStore.setMtime(valSession.id, time_msec()) if int(valSession.sendAttemptNumber) >= int(sendAttempt): logger.info( "Not mailing code because current send attempt (%d) is not less than given send attempt (%s)", int(sendAttempt), int(valSession.sendAttemptNumber)) return valSession.id ipstring = ipaddress if ipaddress else u"an unknown location" substitutions = { 'ipaddress': ipstring, 'link': self.makeValidateLink(valSession, clientSecret, nextLink), 'token': valSession.token, } logger.info( "Attempting to mail code %s (nextLink: %s) to %s", valSession.token, nextLink, emailAddress, ) sendEmail(self.sydent, 'email.template', emailAddress, substitutions) valSessionStore.setSendAttemptNumber(valSession.id, sendAttempt) return valSession.id
def requestToken(self, phoneNumber, clientSecret, sendAttempt, nextLink): if str(phoneNumber.country_code) in self.smsRules: action = self.smsRules[str(phoneNumber.country_code)] if action == 'reject': raise DestinationRejectedException() valSessionStore = ThreePidValSessionStore(self.sydent) msisdn = phonenumbers.format_number( phoneNumber, phonenumbers.PhoneNumberFormat.E164 )[1:] valSession = valSessionStore.getOrCreateTokenSession( medium='msisdn', address=msisdn, clientSecret=clientSecret ) valSessionStore.setMtime(valSession.id, time_msec()) if int(valSession.sendAttemptNumber) >= int(sendAttempt): logger.info("Not texting code because current send attempt (%d) is not less than given send attempt (%s)", int(sendAttempt), int(valSession.sendAttemptNumber)) return valSession.id smsBodyTemplate = self.sydent.cfg.get('sms', 'bodyTemplate') originator = self.getOriginator(phoneNumber) logger.info( "Attempting to text code %s to %s (country %d) with originator %s", valSession.token, msisdn, phoneNumber.country_code, originator ) smsBody = smsBodyTemplate.format(token=valSession.token) self.omSms.sendTextSMS(smsBody, msisdn, originator) valSessionStore.setSendAttemptNumber(valSession.id, sendAttempt) return valSession.id