diff --git a/app/handler.py b/app/handler.py index 3104a09..1ad1d5a 100644 --- a/app/handler.py +++ b/app/handler.py @@ -18,6 +18,8 @@ import modules.public.register as public_register import modules.public.notme as public_notme import modules.public.verify as public_verify import modules.public.login as public_login +import modules.public.forgot as public_forgot +import modules.public.reset as public_reset import modules.api.auth as api_auth @@ -69,6 +71,24 @@ def index(): } return public_login.login().html(params) +@app.route('/forgot') +def index(): + params = { + "mako" : { + "website" : template_public.main(directory.page["public"], "forgot") + } + } + return public_forgot.forgot().html(params) + +@app.route('/reset', method='GET') +def index(): + params = { + "mako" : { + "website" : template_public.main(directory.page["public"], "reset") + } + } + return public_reset.reset().html(params) + @app.route('/logout') def index(): beaker_session = request.environ.get('beaker.session') @@ -174,3 +194,24 @@ def index(): except Exception as e: print(str(e)) return json.dumps({}, indent = 2).encode() + +@app.route('/api/auth/password/forgot/', method='POST') +def index(type): + try: + params = request.json + params["type"] = type + if type == "send": + params["mako"] = { + "email" : template_email.main(directory.page["email"], "reset") + } + elif type == "change": + params["mako"] = { + "email" : template_email.main(directory.page["email"], "message") + } + else: + pass + response.content_type = 'application/json' + return json.dumps(api_auth.auth().forgot(params), indent = 2).encode() + except Exception as e: + print(str(e)) + return json.dumps({}, indent = 2).encode() diff --git a/app/modules/api/auth.py b/app/modules/api/auth.py index 9d76aa0..80c20ca 100644 --- a/app/modules/api/auth.py +++ b/app/modules/api/auth.py @@ -471,14 +471,16 @@ class auth: type = params["type" ] # POST: send / change self.cursor.execute("BEGIN;") try: + loggorilla.fyinf(APIADDR, f"type: {type}") if type == "send": loggorilla.prcss(APIADDR, "Define parameters inside decision") email = params["email"].lower() loggorilla.prcss(APIADDR, "Get dependency data") self.cursor.execute(f"SELECT COUNT(*) AS `count`, auth_profile.token, auth_profile.email FROM auth_profile_verification INNER JOIN auth_profile ON auth_profile.id = auth_profile_verification.auth_profile WHERE auth_profile.email = %s AND auth_profile_verification.type = 'email' AND auth_profile_verification.verified = 1 ; ", (email,) ) result_verified = self.cursor.fetchone() - token = result_verified["token"].decode() if result_verified["count"] >= 1: + loggorilla.prcss(APIADDR, "Get token") + token = result_verified["token"].decode() loggorilla.prcss(APIADDR, "Generate URL") # TODO: set expired time expired = datetime.datetime.now() + datetime.timedelta(minutes=30) # Can be hours or minutes @@ -493,14 +495,13 @@ class auth: loggorilla.prcss(APIADDR, "Sending email") self.smtpconfig['subject' ] = f"{globalvar.title} forgot password" self.smtpconfig['to' ] = email - self.smtpconfig['text' ] = f"Please visit this link to change password: {change_forgot_url}. Avoid the link if you are not request this." - self.smtpconfig['html' ] = Template(params["mako"]["email"]['template']).render( + self.smtpconfig['text' ] = f"Please visit this link to reset password: {change_forgot_url}. Avoid the link if you are not request this." + self.smtpconfig['html' ] = Template(params["mako"]["email"]['index']).render( title = globalvar.title, - heading = self.smtpconfig['subject'], - image = "https://colorlib.com/etc/email-template/10/images/email.png", - unsubscribe = "#", - container = Template(params["mako"]["email"]['container']).render( - change = change_forgot_url + header = globalvar.title, + copyright = globalvar.copyright, + container = Template(params["mako"]["email"]['container']).render( + reset = change_forgot_url ) ) sendwave.smtp(self.smtpconfig) @@ -544,12 +545,11 @@ class auth: self.smtpconfig['subject' ] = f"{globalvar.title} password change success" self.smtpconfig['to' ] = email self.smtpconfig['text' ] = f"You had change your password." - self.smtpconfig['html' ] = Template(params["mako"]["email"]['template']).render( + self.smtpconfig['html' ] = Template(params["mako"]["email"]['index']).render( title = globalvar.title, - heading = self.smtpconfig['subject'], - image = "https://colorlib.com/etc/email-template/10/images/email.png", - unsubscribe = "#", - container = Template(params["mako"]["email"]['container']).render( + header = globalvar.title, + copyright = globalvar.copyright, + container = Template(params["mako"]["email"]['container']).render( message = f"You had change your password." ) ) diff --git a/app/modules/public/forgot.py b/app/modules/public/forgot.py new file mode 100644 index 0000000..3397756 --- /dev/null +++ b/app/modules/public/forgot.py @@ -0,0 +1,30 @@ +from mako.template import Template +from config import globalvar +from bottle import request + +class forgot: + + def __init__(self): + pass + + def html(self, params): + active_page = "Forgot" + user_roles = [0] + beaker_session = request.environ.get('beaker.session') + jwt = beaker_session["token"] if "token" in beaker_session else None + if jwt is not None: + return redirect('/') + else: + return Template(params["mako"]["website"]['index']).render( + title = globalvar.title, + header = globalvar.header, + navbar = Template(params["mako"]["website"]['navbar']).render( + menu = globalvar.menu['public']['navbar'], + user_roles = user_roles, + active_page = active_page + ), + footer = Template(params["mako"]["website"]['footer']).render( + copyright = globalvar.copyright, + ), + container = Template(params["mako"]["website"]['container']).render() + ) diff --git a/app/modules/public/reset.py b/app/modules/public/reset.py new file mode 100644 index 0000000..1397789 --- /dev/null +++ b/app/modules/public/reset.py @@ -0,0 +1,30 @@ +from mako.template import Template +from config import globalvar +from bottle import request + +class reset: + + def __init__(self): + pass + + def html(self, params): + active_page = "Reset" + user_roles = [0] + beaker_session = request.environ.get('beaker.session') + jwt = beaker_session["token"] if "token" in beaker_session else None + if jwt is not None: + return redirect('/') + else: + return Template(params["mako"]["website"]['index']).render( + title = globalvar.title, + header = globalvar.header, + navbar = Template(params["mako"]["website"]['navbar']).render( + menu = globalvar.menu['public']['navbar'], + user_roles = user_roles, + active_page = active_page + ), + footer = Template(params["mako"]["website"]['footer']).render( + copyright = globalvar.copyright, + ), + container = Template(params["mako"]["website"]['container']).render() + ) diff --git a/app/pages/email/reset.html b/app/pages/email/reset.html new file mode 100644 index 0000000..d2b01b3 --- /dev/null +++ b/app/pages/email/reset.html @@ -0,0 +1,6 @@ +

Forgot Password

+ +

Please visit this link below to reset password. Avoid the link if you are not request this.

+ + Reset password + diff --git a/app/pages/public/forgot.html b/app/pages/public/forgot.html new file mode 100644 index 0000000..54bfa68 --- /dev/null +++ b/app/pages/public/forgot.html @@ -0,0 +1,15 @@ +

Forgot Password

+ + + + +
+ + + + + + + diff --git a/app/pages/public/login.html b/app/pages/public/login.html index 864530a..71aa682 100644 --- a/app/pages/public/login.html +++ b/app/pages/public/login.html @@ -4,7 +4,9 @@

- +
+ +Forgot password