def test_02_send_email(self): r = add_smtpserver(identifier="myserver", server="1.2.3.4", tls=False) self.assertTrue(r > 0) server = get_smtpserver("myserver") smtpmock.setdata(response={"*****@*****.**": (200, "OK")}, support_tls=False) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, True) smtpmock.setdata( response={"*****@*****.**": (550, "Message rejected")}, support_tls=False) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, False) # Use TLS r = add_smtpserver(identifier="myserver", server="1.2.3.4", tls=True) self.assertTrue(r > 0) server = get_smtpserver("myserver") smtpmock.setdata(response={"*****@*****.**": (200, "OK")}, support_tls=True) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, True) # If we configure TLS but the server does not support this, we raise # an error smtpmock.setdata(response={"*****@*****.**": (200, "OK")}, support_tls=False) self.assertRaises(SMTPException, server.send_email, ["*****@*****.**"], "Hallo", "Body") delete_smtpserver("myserver")
def test_02_send_email(self): r = add_smtpserver(identifier="myserver", server="1.2.3.4", tls=False) self.assertTrue(r > 0) server = get_smtpserver("myserver") smtpmock.setdata(response={"*****@*****.**": (200, "OK")}, support_tls=False) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, True) smtpmock.setdata(response={"*****@*****.**": (550, "Message rejected")}, support_tls=False) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, False) # Use TLS r = add_smtpserver(identifier="myserver", server="1.2.3.4", tls=True) self.assertTrue(r > 0) server = get_smtpserver("myserver") smtpmock.setdata(response={"*****@*****.**": (200, "OK")}, support_tls=True) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, True) # If we configure TLS but the server does not support this, we raise # an error smtpmock.setdata(response={"*****@*****.**": (200, "OK")}, support_tls=False) self.assertRaises(SMTPException, server.send_email, ["*****@*****.**"], "Hallo", "Body") delete_smtpserver("myserver")
def test_04_create_recovery_nonascii(self): smtpmock.setdata(response={"*****@*****.**": (200, "OK")}) recoverycode = "reccode" # create resolver and realm param = self.parameters param["resolver"] = "register" param["type"] = "sqlresolver" r = save_resolver(param) self.assertTrue(r > 0) # recover password with "recovery.identifier" r = add_smtpserver(identifier="myserver", server="1.2.3.4") self.assertTrue(r > 0) set_privacyidea_config("recovery.identifier", "myserver") r = create_recoverycode(User(u"nönäscii", "register"), recoverycode=recoverycode) self.assertEqual(r, True) user = User(u"nönäscii", "register") r = check_recoverycode(user, recoverycode) self.assertEqual(r, True) # The recovery code is not valid a second time r = check_recoverycode(user, recoverycode) self.assertEqual(r, False)
def create(identifier=None): """ This call creates or updates an SMTP server definition. :param identifier: The unique name of the SMTP server definition :param server: The FQDN or IP of the mail server :param port: The port of the mail server :param username: The mail username for authentication at the SMTP server :param password: The password for authentication at the SMTP server :param tls: If the server should do TLS :param description: A description for the definition """ param = request.all_data server = getParam(param, "server", required) port = int(getParam(param, "port", default=25)) username = getParam(param, "username", default="") password = getParam(param, "password", default="") sender = getParam(param, "sender", default="") tls = getParam(param, "tls", default=False) tls = tls in ["True", True, "true", "1"] description = getParam(param, "description", default="") r = add_smtpserver(identifier, server, port=port, username=username, password=password, tls=tls, description=description, sender=sender) g.audit_object.log({'success': r > 0, 'info': r}) return send_result(r > 0)
def create(identifier=None): """ This call creates or updates an SMTP server definition. :param identifier: The unique name of the SMTP server definition :param server: The FQDN or IP of the mail server :param port: The port of the mail server :param username: The mail username for authentication at the SMTP server :param password: The password for authentication at the SMTP server :param tls: If the server should do TLS :param description: A description for the definition """ param = request.all_data server = getParam(param, "server", required) port = int(getParam(param, "port", default=25)) username = getParam(param, "username", default="") password = getParam(param, "password", default="") sender = getParam(param, "sender", default="") tls = is_true(getParam(param, "tls", default=False)) description = getParam(param, "description", default="") timeout = int(getParam(param, "timeout") or 10) r = add_smtpserver(identifier, server, port=port, username=username, password=password, tls=tls, description=description, sender=sender, timeout=timeout) g.audit_object.log({'success': r > 0, 'info': r}) return send_result(r > 0)
def test_01_enqueue_email(self): r = add_smtpserver(identifier="myserver", server="1.2.3.4", tls=False, enqueue_job=True) self.assertTrue(r > 0) server = get_smtpserver("myserver") smtpmock.setdata(response={"*****@*****.**": (200, "OK")}, support_tls=False) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, True) queue = get_job_queue() self.assertEqual(len(queue.enqueued_jobs), 1) job_name, args, kwargs = queue.enqueued_jobs[0] self.assertEqual(job_name, "smtpserver.send_email") self.assertEqual(args[1], ["*****@*****.**"]) self.assertEqual(args[2], "Hallo") self.assertEqual(args[3], "Body") # send_email returns True, even if the SMTP server will eventually reject the message smtpmock.setdata(response={"*****@*****.**": (550, "Message rejected")}, support_tls=False) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, True) self.assertEqual(len(queue.enqueued_jobs), 2) job_name, args, kwargs = queue.enqueued_jobs[1] self.assertEqual(job_name, "smtpserver.send_email") self.assertEqual(args[1], ["*****@*****.**"]) self.assertEqual(args[2], "Hallo") self.assertEqual(args[3], "Body") delete_smtpserver("myserver")
def test_01_enqueue_email(self): r = add_smtpserver(identifier="myserver", server="1.2.3.4", tls=False, enqueue_job=True) self.assertTrue(r > 0) server = get_smtpserver("myserver") smtpmock.setdata(response={"*****@*****.**": (200, "OK")}, support_tls=False) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, True) queue = get_job_queue() self.assertEqual(len(queue.enqueued_jobs), 1) job_name, args, kwargs = queue.enqueued_jobs[0] self.assertEqual(job_name, "smtpserver.send_email") self.assertEqual(args[1], ["*****@*****.**"]) self.assertEqual(args[2], "Hallo") self.assertEqual(args[3], "Body") # send_email returns True, even if the SMTP server will eventually reject the message smtpmock.setdata( response={"*****@*****.**": (550, "Message rejected")}, support_tls=False) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, True) self.assertEqual(len(queue.enqueued_jobs), 2) job_name, args, kwargs = queue.enqueued_jobs[1] self.assertEqual(job_name, "smtpserver.send_email") self.assertEqual(args[1], ["*****@*****.**"]) self.assertEqual(args[2], "Hallo") self.assertEqual(args[3], "Body") delete_smtpserver("myserver")
def test_14_send_to_adminrealm(self): # setup realms self.setUp_user_realms() r = add_smtpserver(identifier="myserver", server="1.2.3.4", tls=False) self.assertTrue(r > 0) smtpmock.setdata(response={"*****@*****.**": (200, "OK")}, support_tls=False) g = FakeFlaskG() audit_object = FakeAudit() audit_object.audit_data["serial"] = "123456" g.logged_in_user = {"user": "******", "role": "admin", "realm": ""} g.audit_object = audit_object builder = EnvironBuilder(method='POST', data={'serial': "OATH123456"}, headers={}) env = builder.get_environ() # Set the remote address so that we can filter for it env["REMOTE_ADDR"] = "10.0.0.1" g.client_ip = env["REMOTE_ADDR"] req = Request(env) req.all_data = {"serial": "SomeSerial", "user": "******"} req.User = User("cornelius", self.realm1) resp = Response() resp.data = """{"result": {"value": true}, "detail": {"registrationcode": "12345678910"} } """ # send email to user in adminrealm "realm1" # Although this is no admin realm, but this realm contains some email # addresses. options = { "g": g, "request": req, "response": resp, "handler_def": { "conditions": { "serial": "123.*" }, "options": { "body": "your {registrationcode}", "emailconfig": "myserver", "To": NOTIFY_TYPE.ADMIN_REALM, "To " + NOTIFY_TYPE.ADMIN_REALM: "realm1" } } } un_handler = UserNotificationEventHandler() res = un_handler.do("sendmail", options=options) self.assertTrue(res)
def test_01_create_smtpserver(self): r = add_smtpserver(identifier="myserver", server="1.2.3.4") self.assertTrue(r > 0) r = add_smtpserver(identifier="myserver1", server="1.2.3.4") r = add_smtpserver(identifier="myserver2", server="1.2.3.4") server_list = get_smtpservers() self.assertTrue(server_list) self.assertEqual(len(server_list), 3) server_list = get_smtpservers(identifier="myserver") self.assertTrue(server_list[0].config.identifier, "myserver") self.assertTrue(server_list[0].config.port, 25) for server in ["myserver", "myserver1", "myserver2"]: r = delete_smtpserver(server) self.assertTrue(r > 0) server_list = get_smtpservers() self.assertEqual(len(server_list), 0)
def test_01_create_recovery(self): smtpmock.setdata(response={"*****@*****.**": (200, "OK")}) # missing configuration self.assertRaises(privacyIDEAError, create_recoverycode, user=User("cornelius", self.realm1)) # recover password with "recovery.identifier" r = add_smtpserver(identifier="myserver", server="1.2.3.4") self.assertTrue(r > 0) set_privacyidea_config("recovery.identifier", "myserver") r = create_recoverycode(User("cornelius", self.realm1)) self.assertEqual(r, True)
def test_02_send_email(self): r = add_smtpserver(identifier="myserver", server="1.2.3.4") self.assertTrue(r > 0) server = get_smtpserver("myserver") smtpmock.setdata(response={"*****@*****.**": (200, "OK")}) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, True) smtpmock.setdata( response={"*****@*****.**": (550, "Message rejected")}) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, False) delete_smtpserver("myserver")
def test_02_send_email(self): r = add_smtpserver(identifier="myserver", server="1.2.3.4") self.assertTrue(r > 0) server = get_smtpserver("myserver") smtpmock.setdata(response={"*****@*****.**": (200, "OK")}) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, True) smtpmock.setdata(response={"*****@*****.**": (550, "Message rejected")}) r = server.send_email(["*****@*****.**"], "Hallo", "Body") self.assertEqual(r, False) delete_smtpserver("myserver")
def test_08_smsgateway_success(self): r = add_smtpserver("myServer", "1.2.3.4", sender="*****@*****.**") self.assertTrue(r > 0) smtpmock.setdata(response={"*****@*****.**": (200, "OK")}) identifier = "myMail" provider_module = "privacyidea.lib.smsprovider.SmtpSMSProvider" \ ".SmtpSMSProvider" id = set_smsgateway(identifier, provider_module, description="test", options={"SMTPIDENTIFIER": "myServer", "MAILTO": "*****@*****.**", "SUBJECT": "{phone}", "BODY": "{otp}"}) self.assertTrue(id > 0) sms = create_sms_instance(identifier) r = sms.submit_message("123456", "Halo") self.assertTrue(r)
def test_07_locked_token_wrong_pin(self): tok = init_token({ "serial": "lock2", "type": "spass", "pin": "pin" }, user=User("cornelius", "realm1")) # lock it tok.set_failcount(10) uhandler = UserNotificationEventHandler() resp = Response() resp.data = """{"result": {"value": false}}""" builder = EnvironBuilder(method='POST') env = builder.get_environ() req = Request(env) req.all_data = {"user": "******", "pass": "******"} req.User = User("cornelius", self.realm1) # check the do action. g = FakeFlaskG() audit_object = FakeAudit() audit_object.audit_data["serial"] = None g.audit_object = audit_object options = { "g": g, "handler_def": { "conditions": { "token_locked": "True" } }, "response": resp, "request": req } r = add_smtpserver(identifier="myserver", server="1.2.3.4", tls=False) self.assertTrue(r > 0) smtpmock.setdata(response={"*****@*****.**": (200, "OK")}, support_tls=False) r = uhandler.check_condition(options) self.assertEqual(r, True) r = uhandler.do("sendmail", options=options) self.assertEqual(r, True)
def test_02_sendmail(self): # setup realms self.setUp_user_realms() r = add_smtpserver(identifier="myserver", server="1.2.3.4", tls=False) self.assertTrue(r > 0) smtpmock.setdata(response={"*****@*****.**": (200, "OK")}, support_tls=False) g = FakeFlaskG() audit_object = FakeAudit() audit_object.audit_data["serial"] = "123456" g.logged_in_user = {"user": "******", "role": "admin", "realm": ""} g.audit_object = audit_object builder = EnvironBuilder(method='POST', data={'serial': "OATH123456"}, headers={}) env = builder.get_environ() # Set the remote address so that we can filter for it env["REMOTE_ADDR"] = "10.0.0.1" g.client_ip = env["REMOTE_ADDR"] req = Request(env) req.all_data = {"serial": "SomeSerial", "user": "******"} req.User = User("cornelius", self.realm1) resp = Response() resp.data = """{"result": {"value": true}}""" options = { "g": g, "request": req, "response": resp, "handler_def": { "options": { "emailconfig": "myserver" } } } un_handler = UserNotificationEventHandler() res = un_handler.do("sendmail", options=options) self.assertTrue(res)
def test_22_new_email_config(self): smtpmock.setdata(response={"*****@*****.**": (200, 'OK')}) transactionid = "123456098717" # send the email with the new configuration r = add_smtpserver(identifier="myServer", server="1.2.3.4") set_privacyidea_config("email.identifier", "myServer") db_token = Token.query.filter_by(serial=self.serial1).first() token = EmailTokenClass(db_token) self.assertTrue(token.check_otp("123456", 1, 10) == -1) c = token.create_challenge(transactionid) self.assertTrue(c[0], c) otp = c[1] self.assertTrue(c[3].get("state"), transactionid) # check for the challenges response r = token.check_challenge_response(passw=otp) self.assertTrue(r, r) delete_smtpserver("myServer") delete_privacyidea_config("email.identifier")
def test_23_specific_email_config(self): smtpmock.setdata(response={"*****@*****.**": (200, 'OK')}) transactionid = "123456098723" # create new configuration r = add_smtpserver(identifier="myServer", server="1.2.3.4") set_privacyidea_config("email.identifier", "myServer") # set it to the token instead of changing the global config db_token = Token.query.filter_by(serial=self.serial1).first() token = EmailTokenClass(db_token) token.add_tokeninfo("email.identifier", "myServer") self.assertTrue(token.check_otp("123456", 1, 10) == -1) c = token.create_challenge(transactionid) self.assertTrue(c[0], c) otp = c[1] self.assertTrue(c[3]["attributes"]["state"], transactionid) # check for the challenges response r = token.check_challenge_response(passw=otp) self.assertTrue(r, r) delete_smtpserver("myServer")
def test_02_sendmail(self): # setup realms self.setUp_user_realms() r = add_smtpserver(identifier="myserver", server="1.2.3.4", tls=False) self.assertTrue(r > 0) smtpmock.setdata(response={"*****@*****.**": (200, "OK")}, support_tls=False) g = FakeFlaskG() audit_object = FakeAudit() audit_object.audit_data["serial"] = "123456" g.logged_in_user = {"user": "******", "role": "admin", "realm": ""} g.audit_object = audit_object builder = EnvironBuilder(method='POST', data={'serial': "OATH123456"}, headers={}) env = builder.get_environ() # Set the remote address so that we can filter for it env["REMOTE_ADDR"] = "10.0.0.1" g.client_ip = env["REMOTE_ADDR"] req = Request(env) req.all_data = {"serial": "SomeSerial", "user": "******"} options = {"g": g, "request": req, "emailconfig": "myserver"} un_handler = UserNotificationEventHandler() res = un_handler.do("sendmail", options=options) self.assertTrue(res)
def test_04_create_recovery_nonascii(self): smtpmock.setdata(response={"*****@*****.**": (200, "OK")}) recoverycode = "reccode" # create resolver and realm param = self.parameters param["resolver"] = "register" param["type"] = "sqlresolver" r = save_resolver(param) self. assertTrue(r > 0) # recover password with "recovery.identifier" r = add_smtpserver(identifier="myserver", server="1.2.3.4") self.assertTrue(r > 0) set_privacyidea_config("recovery.identifier", "myserver") r = create_recoverycode(User(u"nönäscii", "register"), recoverycode=recoverycode) self.assertEqual(r, True) user = User(u"nönäscii", "register") r = check_recoverycode(user, recoverycode) self.assertEqual(r, True) # The recovery code is not valid a second time r = check_recoverycode(user, recoverycode) self.assertEqual(r, False)
def test_01_register_user(self): smtpmock.setdata(response={"*****@*****.**": (200, "OK")}) # create resolver and realm param = self.parameters param["resolver"] = "register" param["type"] = "sqlresolver" r = save_resolver(param) self. assertTrue(r > 0) added, failed = set_realm("register", resolvers=["register"]) self.assertTrue(added > 0) self.assertEqual(len(failed), 0) # create policy r = set_policy(name="pol2", scope=SCOPE.REGISTER, action="{0!s}={1!s}, {2!s}={3!s}".format(ACTION.REALM, "register", ACTION.RESOLVER, "register")) # Try to register, but missing parameter with self.app.test_request_context('/register', method='POST', data={"username": "******", "surname": "Kölbel"}): res = self.app.full_dispatch_request() self.assertTrue(res.status_code == 400, res) # Register fails, missing SMTP config with self.app.test_request_context('/register', method='POST', data={"username": "******", "surname": "Kölbel", "givenname": "Cornelius", "password": "******", "email": "*****@*****.**"}): res = self.app.full_dispatch_request() self.assertTrue(res.status_code == 400, res) data = json.loads(res.data.decode('utf8')) self.assertEqual(data.get("result").get("error").get("code"), ERROR.REGISTRATION) self.assertEqual(data.get("result").get("error").get("message"), u'ERR402: No SMTP server configuration specified!') # Set SMTP config and policy add_smtpserver("myserver", "1.2.3.4", sender="pi@localhost") set_policy("pol3", scope=SCOPE.REGISTER, action="{0!s}=myserver".format(ACTION.EMAILCONFIG)) with self.app.test_request_context('/register', method='POST', data={"username": "******", "surname": "Kölbel", "givenname": "Cornelius", "password": "******", "email": "*****@*****.**"}): res = self.app.full_dispatch_request() self.assertTrue(res.status_code == 200, res) # Registering the user a second time will fail with self.app.test_request_context('/register', method='POST', data={"username": "******", "surname": "Kölbel", "givenname": "Cornelius", "password": "******", "email": "*****@*****.**"}): res = self.app.full_dispatch_request() self.assertTrue(res.status_code == 400, res) # get the register status with self.app.test_request_context('/register', method='GET'): res = self.app.full_dispatch_request() self.assertTrue(res.status_code == 200, res) data = json.loads(res.data.decode('utf8')) self.assertEqual(data.get("result").get("value"), True)
def test_03_updateserver(self): r = add_smtpserver(identifier="myserver", server="100.2.3.4") self.assertTrue(r > 0) server_list = get_smtpservers(identifier="myserver") self.assertTrue(server_list[0].config.server, "100.2.3.4")
def test_05_check_conditions(self): uhandler = UserNotificationEventHandler() resp = Response() resp.data = """{"result": {"value": false}}""" builder = EnvironBuilder(method='POST') env = builder.get_environ() req = Request(env) req.all_data = {} req.User = User() r = uhandler.check_condition( {"g": {}, "handler_def": {"conditions": {"logged_in_user": "******"}}, "response": resp, "request": req}) self.assertEqual(r, False) r = uhandler.check_condition( {"g": {}, "handler_def": {"conditions": {"result_value": True}}, "response": resp, "request": req}) self.assertEqual(r, False) # check a locked token with maxfail = failcount builder = EnvironBuilder(method='POST', data={'serial': "OATH123456"}, headers={}) req.all_data = {"user": "******"} resp.data = """{"result": {"value": false}, "detail": {"serial": "lockedtoken"} } """ tok = init_token({"serial": "lockedtoken", "type": "spass"}) r = uhandler.check_condition( {"g": {}, "handler_def": {"conditions": {"token_locked": "True"}}, "response": resp, "request": req } ) # not yet locked self.assertEqual(r, False) # lock it tok.set_failcount(10) options = {"g": {}, "handler_def": {"conditions": {"token_locked": "True"}}, "response": resp, "request": req } r = uhandler.check_condition(options) # now locked self.assertEqual(r, True) # check the do action. g = FakeFlaskG() audit_object = FakeAudit() audit_object.audit_data["serial"] = "123456" g.audit_object = audit_object options = {"g": g, "handler_def": {"conditions": {"token_locked": "True"}}, "response": resp, "request": req } r = add_smtpserver(identifier="myserver", server="1.2.3.4", tls=False) self.assertTrue(r > 0) smtpmock.setdata(response={"*****@*****.**": (200, "OK")}, support_tls=False) r = uhandler.do("sendmail", options=options) self.assertEqual(r, True)
def test_07_identifier_config_success(self): r = add_smtpserver("myServer", "1.2.3.4", sender="*****@*****.**") self.assertTrue(r > 0) smtpmock.setdata(response={"*****@*****.**": (200, "OK")}) r = self.identifier_provider.submit_message("123456", "Halo") self.assertTrue(r)
def test_01_register_user(self): smtpmock.setdata(response={"*****@*****.**": (200, "OK")}) # create resolver and realm param = self.parameters param["resolver"] = "register" param["type"] = "sqlresolver" r = save_resolver(param) self.assertTrue(r > 0) added, failed = set_realm("register", resolvers=["register"]) self.assertTrue(len(added) > 0, added) self.assertEqual(len(failed), 0, failed) # create policy r = set_policy(name="pol2", scope=SCOPE.REGISTER, action="{0!s}={1!s}, {2!s}={3!s}".format( ACTION.REALM, "register", ACTION.RESOLVER, "register")) # Try to register, but missing parameter with self.app.test_request_context('/register', method='POST', data={ "username": "******", "surname": "Kölbel" }): res = self.app.full_dispatch_request() self.assertTrue(res.status_code == 400, res) # Register fails, missing SMTP config with self.app.test_request_context('/register', method='POST', data={ "username": "******", "surname": "Kölbel", "givenname": "Cornelius", "password": "******", "email": "*****@*****.**" }): res = self.app.full_dispatch_request() self.assertTrue(res.status_code == 400, res) data = json.loads(res.data.decode('utf8')) self.assertEqual( data.get("result").get("error").get("code"), ERROR.REGISTRATION) self.assertEqual( data.get("result").get("error").get("message"), u'ERR402: No SMTP server configuration specified!') # Set SMTP config and policy add_smtpserver("myserver", "1.2.3.4", sender="pi@localhost") set_policy("pol3", scope=SCOPE.REGISTER, action="{0!s}=myserver".format(ACTION.EMAILCONFIG)) with self.app.test_request_context('/register', method='POST', data={ "username": "******", "surname": "Kölbel", "givenname": "Cornelius", "password": "******", "email": "*****@*****.**" }): res = self.app.full_dispatch_request() self.assertTrue(res.status_code == 200, res) # Registering the user a second time will fail with self.app.test_request_context('/register', method='POST', data={ "username": "******", "surname": "Kölbel", "givenname": "Cornelius", "password": "******", "email": "*****@*****.**" }): res = self.app.full_dispatch_request() self.assertTrue(res.status_code == 400, res) # get the register status with self.app.test_request_context('/register', method='GET'): res = self.app.full_dispatch_request() self.assertTrue(res.status_code == 200, res) data = json.loads(res.data.decode('utf8')) self.assertEqual(data.get("result").get("value"), True)