# CostaPy # Copyright (C) 2022 Dita Aji Pratama # # This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. # You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/. from bottle import Bottle, route, request, response, redirect import json from config import directory import templates.plain.main as template_public import templates.postcard.main as template_email import modules.public.home as public_home 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 app = Bottle() @app.route('/') def index(): params = { "mako":{ "website" : template_public.main(directory.page["public"], "home") } } return public_home.home().html(params) @app.route('/register/') def index(roles): params = { "roles" :roles, "mako" :{ "website" : template_public.main(directory.page["public"], "register") } } return public_register.register().html(params) @app.route('/notme', method='GET') def index(): params = { "mako" : { "website" : template_public.main(directory.page["public"], "notme") } } return public_notme.notme().html(params) @app.route('/verify', method='GET') def index(): params = { "mako" : { "website" : template_public.main(directory.page["public"], "verify") } } return public_verify.verify().html(params) @app.route('/login') def index(): params = { "mako" : { "website" : template_public.main(directory.page["public"], "login") } } 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') if "token" in beaker_session: params = { "jwt" : beaker_session["token"], "type" : "out" } response_session = api_auth.auth().session(params) response_logout = api_auth.auth().logout(params) if response_session['status'] == 'success' and response_logout['status'] == 'success' : redirect('/?message=logout success') else: print('logout failed') print(f"response session: {response_session['status']}") print(f"response logout: {response_logout['status']}") redirect('/?message=logout failed') else: redirect('/') @app.route('/api/auth/registration/register/', method='POST') def index(roles): try: params = request.json params["roles" ] = roles params["mako" ] = { "email" : template_email.main(directory.page["email"], "verification") } response.content_type = 'application/json' return json.dumps(api_auth.auth().register(params), indent = 2).encode() except Exception as e: print(str(e)) return json.dumps({}, indent = 2).encode() @app.route('/api/auth/registration/notme', method='POST') def index(): try: params = request.json params["mako" ] = { "email" : template_email.main(directory.page["email"], "message") } response.content_type = 'application/json' return json.dumps(api_auth.auth().notme(params), indent = 2).encode() except Exception as e: print(str(e)) return json.dumps({}, indent = 2).encode() @app.route('/api/auth/registration/resend', method='GET') def index(): try: params = { "email" : request.query.email, "mako" : { "email" : template_email.main(directory.page["email"], "verification") } } response.content_type = 'application/json' return json.dumps(api_auth.auth().resend(params), indent = 2).encode() except Exception as e: print(str(e)) return json.dumps({}, indent = 2).encode() @app.route('/api/auth/registration/verify', method='POST') def index(): try: params = request.json params["mako" ] = { "email" : template_email.main(directory.page["email"], "message") } response.content_type = 'application/json' return json.dumps(api_auth.auth().verify(params), indent = 2).encode() except Exception as e: print(str(e)) return json.dumps({}, indent = 2).encode() @app.route('/api/auth/login', method='POST') def index(): try: params = request.json response.content_type = 'application/json' return json.dumps(api_auth.auth().login(params), indent = 2).encode() except Exception as e: print(str(e)) return json.dumps({}, indent = 2).encode() @app.route('/api/auth/session/', method='POST') def index(type): try: params = request.json params["type"] = type response.content_type = 'application/json' return json.dumps(api_auth.auth().session(params), indent = 2).encode() except Exception as e: print(str(e)) return json.dumps({}, indent = 2).encode() @app.route('/api/auth/logout', method='POST') def index(): try: params = request.json response.content_type = 'application/json' return json.dumps(api_auth.auth().logout(params), indent = 2).encode() 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()