From b90aae68627f5f1faeb9001799a219a3d6522f7f Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 09:32:21 +0700 Subject: [PATCH 01/20] Add dashboard pages directory on config --- app/config/directory.py | 1 + 1 file changed, 1 insertion(+) diff --git a/app/config/directory.py b/app/config/directory.py index 1d82c5b..5faba2b 100644 --- a/app/config/directory.py +++ b/app/config/directory.py @@ -2,6 +2,7 @@ from core import template page = { 'public' :'pages/public', + 'dashboard' :'pages/dashboard', 'email' :'pages/email' } From 93e2693db4c777430ffc207dec116674744225c9 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 09:37:35 +0700 Subject: [PATCH 02/20] Configure dashboard menu on globalvar configuration --- app/config/globalvar.py | 51 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/app/config/globalvar.py b/app/config/globalvar.py index 12973af..c86b2eb 100644 --- a/app/config/globalvar.py +++ b/app/config/globalvar.py @@ -86,5 +86,56 @@ menu = { "roles":[1,2,3] } ] + }, + "dashboard": { + "navbar": [ + { + "name":"Home", + "target":"_self", + "href":"/", + "notification":0, + "roles":[0,1,2,3] + } + ], + "profile": [ + { + "name" :"Profile", + "href" :"/dashboard/profile", + "target":"_self", + "roles":[1,2] + }, + { + "name" :"Settings", + "href" :"/dashboard/settings", + "target":"_self", + "roles":[1,2] + }, + { + "name" :"Logout", + "href" :"/logout", + "target":"_self", + "roles":[1,2,3] + } + ], + "sidebar": [ + { + "name":"Dashboard", + "target":"_self", + "href":"/dashboard", + "roles":[1,2] + }, + { + "name":"Roles", + "target":"_self", + "href":"/dashboard/roles", + "roles":[1] + }, + { + "name":"Users", + "target":"_self", + "href":"/dashboard/users", + "roles":[1,2] + } + ] } } From c431813cefa02411f142cb21b23492bef8a27c60 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 12:16:45 +0700 Subject: [PATCH 03/20] Dashboard modules --- app/modules/dashboard/dashboard.py | 48 ++++++++++++++++++++++++++++++ app/modules/dashboard/roles.py | 47 +++++++++++++++++++++++++++++ app/modules/dashboard/users.py | 47 +++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 app/modules/dashboard/dashboard.py create mode 100644 app/modules/dashboard/roles.py create mode 100644 app/modules/dashboard/users.py diff --git a/app/modules/dashboard/dashboard.py b/app/modules/dashboard/dashboard.py new file mode 100644 index 0000000..95e9452 --- /dev/null +++ b/app/modules/dashboard/dashboard.py @@ -0,0 +1,48 @@ +from mako.template import Template +from config import globalvar +from scripts import loggorilla + +import procedure.validation as procedure_validation + +class dashboard: + + def __init__(self): + pass + + def html(self, params): + APIADDR = "/dashboard" + + loggorilla.prcss(APIADDR, "Define page parameters") + active_page = "Dashboard" + allowed_roles = [0,1,2,3] + + loggorilla.prcss(APIADDR, "Account validation") + user_validation = procedure_validation.validation().account(APIADDR, allowed_roles) + user = user_validation['data'] + + return Template(params["mako"]["website"]['index']).render( + title = globalvar.title, + navbar = Template(params["mako"]["website"]['navbar']).render( + title = globalvar.title, + menu = globalvar.menu['dashboard']['navbar'], + profile = { + "picture" : "https://ditaajipratama.net/img/no-profile-donut.png", + "name" : user['profile']['username'], + "menu" : globalvar.menu['dashboard']['profile'] + }, + user_roles = user['profile']['roles'], + active_page = active_page + ), + sidebar = Template(params["mako"]["website"]['sidebar']).render( + menu = globalvar.menu['dashboard']['sidebar'], + user_roles = user['profile']['roles'], + active_page = active_page + ), + footer = Template(params["mako"]["website"]['footer']).render( + copyright = globalvar.copyright, + ), + container = Template(params["mako"]["website"]['container']).render( + greeting = f"Welcome to your new web application! This placeholder page is here to let you know that your web framework is successfully set up and ready to go. Now, it's time to start building your project. Dive into the documentation to explore the features and capabilities at your disposal.", + user = user + ) + ) diff --git a/app/modules/dashboard/roles.py b/app/modules/dashboard/roles.py new file mode 100644 index 0000000..11ac683 --- /dev/null +++ b/app/modules/dashboard/roles.py @@ -0,0 +1,47 @@ +from mako.template import Template +from config import globalvar +from scripts import loggorilla + +import procedure.validation as procedure_validation + +class roles: + + def __init__(self): + pass + + def html(self, params): + APIADDR = "/dashboard/roles" + + loggorilla.prcss(APIADDR, "Define page parameters") + active_page = "Roles" + allowed_roles = [1] + + loggorilla.prcss(APIADDR, "Account validation") + user_validation = procedure_validation.validation().account(APIADDR, allowed_roles) + user = user_validation['data'] + + return Template(params["mako"]["website"]['index']).render( + title = globalvar.title, + navbar = Template(params["mako"]["website"]['navbar']).render( + title = globalvar.title, + menu = globalvar.menu['dashboard']['navbar'], + profile = { + "picture" : "https://ditaajipratama.net/img/no-profile-donut.png", + "name" : user['profile']['username'], + "menu" : globalvar.menu['dashboard']['profile'] + }, + user_roles = user['profile']['roles'], + active_page = active_page + ), + sidebar = Template(params["mako"]["website"]['sidebar']).render( + menu = globalvar.menu['dashboard']['sidebar'], + user_roles = user['profile']['roles'], + active_page = active_page + ), + footer = Template(params["mako"]["website"]['footer']).render( + copyright = globalvar.copyright, + ), + container = Template(params["mako"]["website"]['container']).render( + token = user['token'] + ) + ) diff --git a/app/modules/dashboard/users.py b/app/modules/dashboard/users.py new file mode 100644 index 0000000..4579218 --- /dev/null +++ b/app/modules/dashboard/users.py @@ -0,0 +1,47 @@ +from mako.template import Template +from config import globalvar +from scripts import loggorilla + +import procedure.validation as procedure_validation + +class users: + + def __init__(self): + pass + + def html(self, params): + APIADDR = "/dashboard/users" + + loggorilla.prcss(APIADDR, "Define page parameters") + active_page = "Users" + allowed_roles = [1,2] + + loggorilla.prcss(APIADDR, "Account validation") + user_validation = procedure_validation.validation().account(APIADDR, allowed_roles) + user = user_validation['data'] + + return Template(params["mako"]["website"]['index']).render( + title = globalvar.title, + navbar = Template(params["mako"]["website"]['navbar']).render( + title = globalvar.title, + menu = globalvar.menu['dashboard']['navbar'], + profile = { + "picture" : "https://ditaajipratama.net/img/no-profile-donut.png", + "name" : user['profile']['username'], + "menu" : globalvar.menu['dashboard']['profile'] + }, + user_roles = user['profile']['roles'], + active_page = active_page + ), + sidebar = Template(params["mako"]["website"]['sidebar']).render( + menu = globalvar.menu['dashboard']['sidebar'], + user_roles = user['profile']['roles'], + active_page = active_page + ), + footer = Template(params["mako"]["website"]['footer']).render( + copyright = globalvar.copyright, + ), + container = Template(params["mako"]["website"]['container']).render( + token = user['token'] + ) + ) From 89776db8c01ecd66ac64e29c3403ae92fdd4af9b Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 12:18:14 +0700 Subject: [PATCH 04/20] Dashboard pages --- app/pages/dashboard/dashboard.html | 25 ++++++++++++++++++ app/pages/dashboard/roles.html | 42 ++++++++++++++++++++++++++++++ app/pages/dashboard/users.html | 31 ++++++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 app/pages/dashboard/dashboard.html create mode 100644 app/pages/dashboard/roles.html create mode 100644 app/pages/dashboard/users.html diff --git a/app/pages/dashboard/dashboard.html b/app/pages/dashboard/dashboard.html new file mode 100644 index 0000000..da8301c --- /dev/null +++ b/app/pages/dashboard/dashboard.html @@ -0,0 +1,25 @@ +

Here is Dashboard!

+ +% if 4 in user['profile']['roles']: + + +
+
+
+
+
+

Debug Section

+

Only tester that can see this section

+

+ Username: ${user['profile']['username']}
+ Email: ${user['profile']['email']}
+ Phone: ${user['profile']['phone']}
+ Roles: ${str(user['profile']['roles'])}
+

+
+
+
+
+
+ +% endif diff --git a/app/pages/dashboard/roles.html b/app/pages/dashboard/roles.html new file mode 100644 index 0000000..12db0ad --- /dev/null +++ b/app/pages/dashboard/roles.html @@ -0,0 +1,42 @@ +
+
+

Roles

+ +
+ + + + + + + + + + + + + + + + +
IDNameUsersAction
+ + + + + +
+
+ + + + + + + +
+ +
+ diff --git a/app/pages/dashboard/users.html b/app/pages/dashboard/users.html new file mode 100644 index 0000000..ab18912 --- /dev/null +++ b/app/pages/dashboard/users.html @@ -0,0 +1,31 @@ +
+
+

Users

+ +
+ + + + + + + + + + + + + +
IDUsernameEmailPhoneRolesVerificationAction
+
+ + + + + + + +
+ +
+ From 653d44f85fefb2781199c6d610789eea6fe91d1e Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 12:25:27 +0700 Subject: [PATCH 05/20] Add prime template for dashboard --- app/templates/prime/LICENSE | 9 + app/templates/prime/README.md | 159 ++++++++++++++++++ app/templates/prime/html/footer.html | 3 + app/templates/prime/html/index.html | 38 +++++ app/templates/prime/html/navbar.html | 44 +++++ app/templates/prime/html/sidebar.html | 16 ++ app/templates/prime/main.py | 33 ++++ app/templates/prime/static/css/style.css | 98 +++++++++++ .../prime/static/img/no-profile-donut.png | Bin 0 -> 130078 bytes 9 files changed, 400 insertions(+) create mode 100644 app/templates/prime/LICENSE create mode 100644 app/templates/prime/README.md create mode 100644 app/templates/prime/html/footer.html create mode 100644 app/templates/prime/html/index.html create mode 100644 app/templates/prime/html/navbar.html create mode 100644 app/templates/prime/html/sidebar.html create mode 100644 app/templates/prime/main.py create mode 100644 app/templates/prime/static/css/style.css create mode 100644 app/templates/prime/static/img/no-profile-donut.png diff --git a/app/templates/prime/LICENSE b/app/templates/prime/LICENSE new file mode 100644 index 0000000..31a122a --- /dev/null +++ b/app/templates/prime/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2024 Dita Aji Pratama + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/app/templates/prime/README.md b/app/templates/prime/README.md new file mode 100644 index 0000000..2c4dc82 --- /dev/null +++ b/app/templates/prime/README.md @@ -0,0 +1,159 @@ +# CostaPy Template - Prime +A prime dashboard based on bootstrap 5 + +## Usage + +- Put the folder in your `templates` directory +- Add to handler + + ```python + import templates.prime.main as template_dashboard + + params["mako"] = { + "website" : template_dashboard.main(directory.page["dashboard"], "users") + } + ``` + +- Define a necessary variable on your modules + + ```python + title = "CostaPy" + + user_roles = [1,2] # A roles that user have + active_page = "Users" # Current active page name + + copyright = "Copyright (C) 2022 Dita Aji Pratama" + greeting = "Hello world" + ``` + +- Define a navbar menu on your modules + + ```python + menu_navbar = [ + { + "name":"Home", + "target":"_self", + "href":"#", + "notification":0, + "roles":[1,2] + }, + { + "name":"Customize", + "href":"#", + "target":"_self", + "notification":0, + "roles":[1,2] + }, + { + "name":"Notification", + "href":"#", + "target":"_self", + "notification":1, + "roles":[1,2] + } + ] + ``` + +- Define a profile menu on your modules + + ```python + menu_profile = { + "picture" : "https://ditaajipratama.net/img/no-profile-donut.png", + "name" : "Dita Aji Pratama", + "menu" : [ + { + "name" :"Profile", + "href" :"/profile" + "target":"_self", + "roles":[1,2] + }, + { + "name" :"Settings", + "href" :"/settings" + "target":"_self", + "roles":[1,2] + }, + { + "name" :"Logout", + "href" :"/logout" + "target":"_self", + "roles":[1,2,3] + } + ] + } + ``` + +- Define a sidebar menu on your modules + + ```python + menu_sidebar = [ + { + "name":"Dashboard", + "target":"_self", + "href":"#", + "roles":[1,2] + }, + { + "name":"Users", + "target":"_self", + "href":"#", + "roles":[1,2] + }, + { + "name":"Items", + "target":"_self", + "href":"#", + "roles":[1,2] + }, + { + "name":"Analytic", + "target":"_self", + "href":"#", + "roles":[1,2] + }, + { + "name":"Reports", + "target":"_self", + "href":"#", + "roles":[1,2] + } + ] + ``` + +- Set a template on your modules + + ```python + return Template(params["mako"]["website"]['index']).render( + title = title, + navbar = Template(params["mako"]["website"]['navbar']).render( + title = title, + menu = menu_navbar, + profile = menu_profile, + user_roles = user_roles, + active_page = active_page + ), + sidebar = Template(params["mako"]["website"]['sidebar']).render( + menu = menu_sidebar, + user_roles = user_roles, + active_page = active_page + ), + footer = Template(params["mako"]["website"]['footer']).render( + copyright = copyright, + ), + container = Template(params["mako"]["website"]['container']).render( + greeting = greeting + ) + ) + ``` + +## License + +MIT License + +Copyright (c) 2024 Dita Aji Pratama + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/app/templates/prime/html/footer.html b/app/templates/prime/html/footer.html new file mode 100644 index 0000000..b485faa --- /dev/null +++ b/app/templates/prime/html/footer.html @@ -0,0 +1,3 @@ +
+

${copyright}

+
diff --git a/app/templates/prime/html/index.html b/app/templates/prime/html/index.html new file mode 100644 index 0000000..966f3cd --- /dev/null +++ b/app/templates/prime/html/index.html @@ -0,0 +1,38 @@ + + + + + + ${title} + + + + + + + ${navbar} + ${sidebar} +
+ ${container} +
+ ${footer} + + + + + diff --git a/app/templates/prime/html/navbar.html b/app/templates/prime/html/navbar.html new file mode 100644 index 0000000..98b8a08 --- /dev/null +++ b/app/templates/prime/html/navbar.html @@ -0,0 +1,44 @@ + + diff --git a/app/templates/prime/html/sidebar.html b/app/templates/prime/html/sidebar.html new file mode 100644 index 0000000..532b78b --- /dev/null +++ b/app/templates/prime/html/sidebar.html @@ -0,0 +1,16 @@ + + diff --git a/app/templates/prime/main.py b/app/templates/prime/main.py new file mode 100644 index 0000000..fd103ad --- /dev/null +++ b/app/templates/prime/main.py @@ -0,0 +1,33 @@ +# MIT License +# +# Copyright (c) 2024 Dita Aji Pratama +# +# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +from core import html + +static = [ + { + "route" : "/templates/prime/css/", + "root" : "./templates/prime/static/css" + }, + { + "route" : "/templates/prime/img/", + "root" : "./templates/prime/static/img" + } +] + +def main(dir, page): + html_template = html.main.get_html("templates/prime/html") + html_page = html.main.get_html(dir) + return { + "index" : html_template [ "index.html" ], + "navbar" : html_template [ "navbar.html" ], + "sidebar" : html_template [ "sidebar.html" ], + "footer" : html_template [ "footer.html" ], + "container" : html_page [f"{page}.html" ] + } diff --git a/app/templates/prime/static/css/style.css b/app/templates/prime/static/css/style.css new file mode 100644 index 0000000..4bbc736 --- /dev/null +++ b/app/templates/prime/static/css/style.css @@ -0,0 +1,98 @@ +body { + min-height: 100vh; +} + +.navbar { + z-index: 1030; /* Ensure the navbar is above other elements */ +} + +.sidebar { + height: calc(100vh - 56px); /* 56px is the height of the navbar */ + position: fixed; + top: 56px; /* Offset by the navbar height */ + left: 0; + width: 250px; + background-color: #343a40; + color: white; + z-index: 1020; /* Lower than navbar to stay behind it */ + transition: transform 0.3s ease-in-out; + overflow-y: auto; /* Make sidebar scrollable */ +} + +.sidebar.minimized { + transform: translateX(-100%); +} + +.content { + margin-left: 250px; + padding: 20px; + transition: margin-left 0.3s ease-in-out; +} + +.content.full-width { + margin-left: 0; +} + +.footer { + position: fixed; + bottom: 0; + width: calc(100% - 250px); + margin-left: 250px; + background-color: #f8f9fa; + padding: 10px; + text-align: center; + transition: margin-left 0.3s ease-in-out; +} + +.footer.full-width { + width: 100%; + margin-left: 0; +} + +.profile-image { + width: 30px; + height: 30px; + border-radius: 50%; + object-fit: cover; +} + +.sidebar-toggle { + position: fixed; + bottom: 20px; + left: 20px; + background-color: #343a40; + color: white; + border: none; + width: 100px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + z-index: 1040; /* Above the sidebar and navbar */ + padding: 5px; + border-radius: 8px; /* Rounded corners */ +} + +.sidebar-toggle span { + margin-left: 5px; +} + +@media (max-width: 768px) { + .sidebar { + transform: translateX(-100%); + } + + .sidebar.show { + transform: translateX(0); + } + + .content { + margin-left: 0; + } + + .footer { + width: 100%; + margin-left: 0; + } +} diff --git a/app/templates/prime/static/img/no-profile-donut.png b/app/templates/prime/static/img/no-profile-donut.png new file mode 100644 index 0000000000000000000000000000000000000000..df4edf55448177bfa6db7b20b8aea8a95e114b5a GIT binary patch literal 130078 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

nK#Z)=Zg}`Ip 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 X)LdsB9CtEBI)gJlWmIBtA^d*;>hu!$ literal 0 HcmV?d00001 From 040002259fc9b7870f9b49df11b49331ede52607 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 12:33:20 +0700 Subject: [PATCH 06/20] Change dashboard url --- app/config/globalvar.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/config/globalvar.py b/app/config/globalvar.py index c86b2eb..87f84c4 100644 --- a/app/config/globalvar.py +++ b/app/config/globalvar.py @@ -64,7 +64,7 @@ menu = { { "name":"Dashboard", "target":"_self", - "href":"/portal/dashboard", + "href":"/dashboard", "roles":[1,2] }, { From 6a72836098e8a470c27debb0eacd1290f86cc85e Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 12:34:45 +0700 Subject: [PATCH 07/20] API modules for dashboard --- app/modules/api/dashboard/roles.py | 143 +++++++++++++++++++++++++++++ app/modules/api/dashboard/users.py | 61 ++++++++++++ 2 files changed, 204 insertions(+) create mode 100644 app/modules/api/dashboard/roles.py create mode 100644 app/modules/api/dashboard/users.py diff --git a/app/modules/api/dashboard/roles.py b/app/modules/api/dashboard/roles.py new file mode 100644 index 0000000..36b91c0 --- /dev/null +++ b/app/modules/api/dashboard/roles.py @@ -0,0 +1,143 @@ +import mysql.connector as mariadb +from mako.template import Template +from bottle import request + +from config import database, globalvar + +from scripts import loggorilla, tokenguard + +import procedure.validation as procedure_validation + +class roles: + + def __init__(self): + self.db_main = mariadb.connect(**database.db_main) + self.cursor = self.db_main.cursor(dictionary=True) + + def list(self, params): + APIADDR = "/api/dashboard/roles/list" + response = {} + + loggorilla.prcss(APIADDR, "Define parameters") + token = params["token" ] + allowed_roles = [1,2] # Roles list is public or not? + + loggorilla.prcss(APIADDR, "Account validation") + user_validation = procedure_validation.validation().account(APIADDR, allowed_roles, token) + user = user_validation['data'] + + self.cursor.execute("BEGIN;") + try: + self.cursor.execute("select auth_roles.id, auth_roles.name, (select count(*) from auth_profile_roles apr where apr.auth_roles = auth_roles.id) AS `count` from auth_roles;") + r_roles = self.cursor.fetchall() + response["status" ] = "success" + response["desc" ] = "data collected" + response["data" ] = r_roles + except Exception as e: + self.cursor.execute("ROLLBACK;") + loggorilla.error(APIADDR, str(e) ) + response["status" ] = "failed" + response["desc" ] = "Internal Server Error. Please contact us if you still have an error." + finally: + self.cursor.execute("COMMIT;") + self.cursor.close() + self.db_main.close() + return response + + def add(self, params): + APIADDR = "/api/dashboard/roles/add" + response = {} + + loggorilla.prcss(APIADDR, "Define parameters") + token = params["token" ] + id = params["id" ] + name = params["name" ] + allowed_roles = [1] + + loggorilla.prcss(APIADDR, "Account validation") + user_validation = procedure_validation.validation().account(APIADDR, allowed_roles, token) + user = user_validation['data'] + + self.cursor.execute("BEGIN;") + try: + self.cursor.execute("INSERT INTO `auth_roles` VALUES (%s, %s, NOW(), NULL) ;", (id, name) ) + response["status" ] = "success" + response["desc" ] = "data added" + except Exception as e: + self.cursor.execute("ROLLBACK;") + loggorilla.error(APIADDR, str(e) ) + response["status" ] = "failed" + response["desc" ] = "Internal Server Error. Please contact us if you still have an error." + finally: + self.cursor.execute("COMMIT;") + self.cursor.close() + self.db_main.close() + return response + + def edit(self, params): + APIADDR = "/api/dashboard/roles/edit" + response = {} + + loggorilla.prcss(APIADDR, "Define parameters") + token = params["token" ] + key = params["key" ] + id = params["id" ] + name = params["name" ] + allowed_roles = [1] + + loggorilla.prcss(APIADDR, "Account validation") + user_validation = procedure_validation.validation().account(APIADDR, allowed_roles, token) + user = user_validation['data'] + + self.cursor.execute("BEGIN;") + try: + if key == 1 or id == 1: + response["status" ] = "failed" + response["desc" ] = "Cannot change super user" + else: + self.cursor.execute("UPDATE `auth_roles` SET `id` = %s, `name` = %s, `when_update` = NOW() WHERE `id` = %s ;", (id, name, key) ) + response["status" ] = "success" + response["desc" ] = "data change" + except Exception as e: + self.cursor.execute("ROLLBACK;") + loggorilla.error(APIADDR, str(e) ) + response["status" ] = "failed" + response["desc" ] = "Internal Server Error. Please contact us if you still have an error." + finally: + self.cursor.execute("COMMIT;") + self.cursor.close() + self.db_main.close() + return response + + def remove(self, params): + APIADDR = "/api/dashboard/roles/remove" + response = {} + + loggorilla.prcss(APIADDR, "Define parameters") + token = params["token" ] + key = params["key" ] + allowed_roles = [1] + + loggorilla.prcss(APIADDR, "Account validation") + user_validation = procedure_validation.validation().account(APIADDR, allowed_roles, token) + user = user_validation['data'] + + self.cursor.execute("BEGIN;") + try: + if key == 1: + response["status" ] = "failed" + response["desc" ] = "Cannot change super user" + else: + self.cursor.execute("DELETE FROM `auth_roles` WHERE `id` = %s ;", (key,) ) + response["status" ] = "success" + response["desc" ] = "data removed" + except Exception as e: + self.cursor.execute("ROLLBACK;") + loggorilla.error(APIADDR, str(e) ) + response["status" ] = "failed" + response["desc" ] = "Internal Server Error. Please contact us if you still have an error." + finally: + self.cursor.execute("COMMIT;") + self.cursor.close() + self.db_main.close() + return response diff --git a/app/modules/api/dashboard/users.py b/app/modules/api/dashboard/users.py new file mode 100644 index 0000000..8fbb078 --- /dev/null +++ b/app/modules/api/dashboard/users.py @@ -0,0 +1,61 @@ +import mysql.connector as mariadb +from mako.template import Template +from bottle import request + +from config import database, globalvar + +from scripts import loggorilla, tokenguard + +import procedure.validation as procedure_validation + +class users: + + def __init__(self): + self.db_main = mariadb.connect(**database.db_main) + self.cursor = self.db_main.cursor(dictionary=True) + + def list(self, params): + APIADDR = "/api/dashboard/users/list" + response = {} + + loggorilla.prcss(APIADDR, "Define parameters") + token = params["token" ] + allowed_roles = [1,2] + + loggorilla.prcss(APIADDR, "Account validation") + user_validation = procedure_validation.validation().account(APIADDR, allowed_roles, token) + user = user_validation['data'] + + self.cursor.execute("BEGIN;") + try: + r_profile = [] + self.cursor.execute("select auth_profile.id, auth_profile.username, auth_profile.email, auth_profile.phone from auth_profile;") + l1 = self.cursor.fetchall() + c1 = 0 + for d1 in l1: + r_profile.append({ + "id" : d1["id" ], + "username" : d1["username" ], + "email" : d1["email" ], + "phone" : d1["phone" ], + "roles" : [], + "verification" : [] + }) + self.cursor.execute("select auth_roles.id, auth_roles.name from auth_profile_roles inner join auth_roles on auth_profile_roles.auth_roles = auth_roles.id where auth_profile_roles.auth_profile = %s ; ", ( d1["id"], ) ) + r_profile[c1]["roles"] = self.cursor.fetchall() + self.cursor.execute("select `type`, `verified` from auth_profile_verification where auth_profile = %s ; ", ( d1["id"], ) ) + r_profile[c1]["verification"] = self.cursor.fetchall() + c1 += 1 + response["status" ] = "success" + response["desc" ] = "data collected" + response["data" ] = r_profile + except Exception as e: + self.cursor.execute("ROLLBACK;") + loggorilla.error(APIADDR, str(e) ) + response["status" ] = "failed" + response["desc" ] = "Internal Server Error. Please contact us if you still have an error." + finally: + self.cursor.execute("COMMIT;") + self.cursor.close() + self.db_main.close() + return response From a73a5ede4d1a89db0a7e09c35b476e99eded1a32 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 12:35:19 +0700 Subject: [PATCH 08/20] JS static for dashboard --- app/static/js/dashboard/roles.js | 119 +++++++++++++++++++++++++++++++ app/static/js/dashboard/users.js | 75 +++++++++++++++++++ 2 files changed, 194 insertions(+) create mode 100644 app/static/js/dashboard/roles.js create mode 100644 app/static/js/dashboard/users.js diff --git a/app/static/js/dashboard/roles.js b/app/static/js/dashboard/roles.js new file mode 100644 index 0000000..d48013b --- /dev/null +++ b/app/static/js/dashboard/roles.js @@ -0,0 +1,119 @@ +var token = document.getElementById("form-token" ).value; + +var table = $('#table-roles').DataTable({ + "orderCellsTop": true, // move sorting to top header + "columnDefs": [ + { "orderable": false, "targets": [3] } // Disable sorting on the first and fourth columns + ], + "ajax": { + "url": "/api/dashboard/roles/list", + "type": "POST", // Use POST method + "dataSrc": "data", + "contentType": "application/json", + "data": function(d) { + // Customize the data payload sent in the POST request + return JSON.stringify({ + "token": token + }); + }, + "error": function (xhr, error, thrown) { + console.error('Error fetching data:', thrown); + console.error('Response:', xhr.responseText); + } + }, + "columns": [ + { + "data": "id", + "render": function(data, type, row) { + return `${data}`; + } + }, + { + "data": "name", + "render": function(data, type, row) { + return `${data}`; + } + }, + { + "data": "count", + "render": function(data, type, row) { + return `${data} User(s)`; + } + }, + { + "data": null, + "defaultContent": "", + "render": function(data, type, row) { + if (row.id==1) return ""; + else return ` + `; + } + } + ], + "initComplete": function () { + // Custom init logic if needed + } +}); + +function submitAdd() { + + var id = document.getElementById("form-add-id" ).value; + var name = document.getElementById("form-add-name" ).value; + var url = "/api/dashboard/roles/add"; + var payload = { + "token" : token, + "id" : id, + "name" : name + }; + + sendHttpRequest(url, "POST", payload, function (error, response) { + if (error) console.error("Error:", error); + else { + table.ajax.reload(null, false); // false means keep the current page + console.log("JSON Response:", response); + } + }, "application/json"); + +} + +function submitEdit(key) { + var id = document.getElementById(`form-edit-id-${key}` ).value; + var name = document.getElementById(`form-edit-name-${key}` ).value; + var url = "/api/dashboard/roles/edit"; + var payload = { + "token" : token, + "key" : key, + "id" : id, + "name" : name + }; + + sendHttpRequest(url, "POST", payload, function (error, response) { + if (error) console.error("Error:", error); + else { + table.ajax.reload(null, false); // false means keep the current page + console.log("JSON Response:", response); + } + }, "application/json"); + +} + +function submitRemove(key) { + var url = "/api/dashboard/roles/remove"; + var payload = { + "token" : token, + "key" : key + }; + + sendHttpRequest(url, "POST", payload, function (error, response) { + if (error) console.error("Error:", error); + else { + table.ajax.reload(null, false); // false means keep the current page + console.log("JSON Response:", response); + } + }, "application/json"); + +} diff --git a/app/static/js/dashboard/users.js b/app/static/js/dashboard/users.js new file mode 100644 index 0000000..6f30b07 --- /dev/null +++ b/app/static/js/dashboard/users.js @@ -0,0 +1,75 @@ +var token = document.getElementById("form-token" ).value; + +var table = $('#table-users').DataTable({ + "columnDefs": [ + { "orderable": false, "targets": [4, 5, 6] } // Disable sorting on the first and fourth columns + ], + "ajax": { + "url": "/api/dashboard/users/list", + "type": "POST", // Use POST method + "dataSrc": "data", + "contentType": "application/json", + "data": function(d) { + // Customize the data payload sent in the POST request + return JSON.stringify({ + "token": token + }); + }, + "error": function (xhr, error, thrown) { + console.error('Error fetching data:', thrown); + console.error('Response:', xhr.responseText); + } + }, + "columns": [ + { + "data": "id", + "render": function(data, type, row) { + return `${data}`; + } + }, + { + "data": "username", + "render": function(data, type, row) { + return `${data}`; + } + }, + { + "data": "email", + "render": function(data, type, row) { + return `${data}`; + } + }, + { + "data": "phone", + "render": function(data, type, row) { + return `${data}`; + } + }, + { + "data": "roles", + "render": function(data, type, row) { + var roles = "" + for (let i = 0; i < data.length; i++) roles += `${data[i].name}`; + return roles; + } + }, + { + "data": "verification", + "render": function(data, type, row) { + var verification = "" + for (let i = 0; i < data.length; i++) verification += ` ${data[i].type}`; + return verification; + } + }, + { + "data": null, + "defaultContent": "", + "render": function(data, type, row) { + return ""; + } + } + ], + "initComplete": function () { + // Custom init logic if needed + } +}); From 1baf50aabc13b3626186a1e549727544f191e3b3 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 12:35:50 +0700 Subject: [PATCH 09/20] Add dashboard template on handler --- app/handler.py | 1 + 1 file changed, 1 insertion(+) diff --git a/app/handler.py b/app/handler.py index 1ad1d5a..cc6cf6f 100644 --- a/app/handler.py +++ b/app/handler.py @@ -11,6 +11,7 @@ import json from config import directory import templates.plain.main as template_public +import templates.prime.main as template_dashboard import templates.postcard.main as template_email import modules.public.home as public_home From b6b37c3456a20b06cbf844e620abfaceb129129f Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 12:36:38 +0700 Subject: [PATCH 10/20] add dashboard modules on handler --- app/handler.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/handler.py b/app/handler.py index cc6cf6f..0a263c5 100644 --- a/app/handler.py +++ b/app/handler.py @@ -22,6 +22,10 @@ import modules.public.login as public_login import modules.public.forgot as public_forgot import modules.public.reset as public_reset +import modules.dashboard.dashboard as dashboard_dashboard +import modules.dashboard.roles as dashboard_roles +import modules.dashboard.users as dashboard_users + import modules.api.auth as api_auth app = Bottle() From 6cc4bc36c148875fbf1ba8264c1dadbd931f9b97 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 12:37:09 +0700 Subject: [PATCH 11/20] Add API modules for dashboard on handler --- app/handler.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/handler.py b/app/handler.py index 0a263c5..3672d58 100644 --- a/app/handler.py +++ b/app/handler.py @@ -28,6 +28,9 @@ import modules.dashboard.users as dashboard_users import modules.api.auth as api_auth +import modules.api.dashboard.roles as api_dashboard_roles +import modules.api.dashboard.users as api_dashboard_users + app = Bottle() @app.route('/') From 2ae101d5f188874b8c574d72700fde4275a81a60 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 12:38:04 +0700 Subject: [PATCH 12/20] Route dashboard API --- app/handler.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/app/handler.py b/app/handler.py index 3672d58..b3268d3 100644 --- a/app/handler.py +++ b/app/handler.py @@ -223,3 +223,53 @@ def index(type): except Exception as e: print(str(e)) return json.dumps({}, indent = 2).encode() + +@app.route('/api/dashboard/roles/list', method='POST') +def index(): + try: + params = request.json + response.content_type = 'application/json' + return json.dumps(api_dashboard_roles.roles().list(params), indent = 2).encode() + except Exception as e: + print(str(e)) + return json.dumps({}, indent = 2).encode() + +@app.route('/api/dashboard/roles/add', method='POST') +def index(): + try: + params = request.json + response.content_type = 'application/json' + return json.dumps(api_dashboard_roles.roles().add(params), indent = 2).encode() + except Exception as e: + print(str(e)) + return json.dumps({}, indent = 2).encode() + +@app.route('/api/dashboard/roles/edit', method='POST') +def index(): + try: + params = request.json + response.content_type = 'application/json' + return json.dumps(api_dashboard_roles.roles().edit(params), indent = 2).encode() + except Exception as e: + print(str(e)) + return json.dumps({}, indent = 2).encode() + +@app.route('/api/dashboard/roles/remove', method='POST') +def index(): + try: + params = request.json + response.content_type = 'application/json' + return json.dumps(api_dashboard_roles.roles().remove(params), indent = 2).encode() + except Exception as e: + print(str(e)) + return json.dumps({}, indent = 2).encode() + +@app.route('/api/dashboard/users/list', method='POST') +def index(): + try: + params = request.json + response.content_type = 'application/json' + return json.dumps(api_dashboard_users.users().list(params), indent = 2).encode() + except Exception as e: + print(str(e)) + return json.dumps({}, indent = 2).encode() From f1926ffd990d1a8e8839ea51b9f27b392c589472 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 12:38:31 +0700 Subject: [PATCH 13/20] Route dashboard --- app/handler.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/app/handler.py b/app/handler.py index b3268d3..9c5ba20 100644 --- a/app/handler.py +++ b/app/handler.py @@ -117,6 +117,33 @@ def index(): else: redirect('/') +@app.route('/dashboard') +def index(): + params = { + "mako" : { + "website" : template_dashboard.main(directory.page["dashboard"], "dashboard") + } + } + return dashboard_dashboard.dashboard().html(params) + +@app.route('/dashboard/roles') +def index(): + params = { + "mako" : { + "website" : template_dashboard.main(directory.page["dashboard"], "roles") + } + } + return dashboard_roles.roles().html(params) + +@app.route('/dashboard/users') +def index(): + params = { + "mako" : { + "website" : template_dashboard.main(directory.page["dashboard"], "users") + } + } + return dashboard_users.users().html(params) + @app.route('/api/auth/registration/register/', method='POST') def index(roles): try: From 6bcf7327c4dc0619231ab0b7c8fdaa239369fdb0 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Thu, 26 Sep 2024 18:22:39 +0700 Subject: [PATCH 14/20] Make a navbar fixed on top --- app/templates/prime/html/navbar.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/templates/prime/html/navbar.html b/app/templates/prime/html/navbar.html index 98b8a08..3eae64e 100644 --- a/app/templates/prime/html/navbar.html +++ b/app/templates/prime/html/navbar.html @@ -1,5 +1,5 @@ -