From 8c6f9252c70c8184ed3d18417bfba207e2c047c0 Mon Sep 17 00:00:00 2001 From: Antonio de la Rosa Date: Wed, 8 Jan 2025 23:47:16 +0100 Subject: [PATCH] Added simplequery functions --- parameciofast/libraries/db/simplequery.py | 27 ++++ parameciofast/libraries/db/webmodel.py | 1 + parameciofast/modules/fastadmin/app.py | 30 ++-- .../modules/fastadmin/templates/login.phtml | 122 ++++++++------- .../modules/fastadmin/templates/signup.phtml | 139 +++++++++++++----- 5 files changed, 214 insertions(+), 105 deletions(-) create mode 100644 parameciofast/libraries/db/simplequery.py diff --git a/parameciofast/libraries/db/simplequery.py b/parameciofast/libraries/db/simplequery.py new file mode 100644 index 0000000..2268b91 --- /dev/null +++ b/parameciofast/libraries/db/simplequery.py @@ -0,0 +1,27 @@ + +# A more simple set for make queries + +def insert(model, dict_values, db): + + final_values={} + + for k in model.fields.keys(): + final_values[k]=model.fields[k].check(dict_values.get(k, '')) + + del final_values[model.name_field_id] + + str_fields="`"+"`, `".join(final_values.keys())+"`" + + str_query='insert into {} ({}) VALUES ({})'.format(model.name, str_fields, ", ".join(['%s']*len(final_values))) + + success=False + + with db.query(str_query, list(final_values.values())) as cursor: + + if cursor.rowcount>0: + + model.last_id=cursor.lastrowid + success=True + + return success + diff --git a/parameciofast/libraries/db/webmodel.py b/parameciofast/libraries/db/webmodel.py index 3acf67c..298c0b0 100644 --- a/parameciofast/libraries/db/webmodel.py +++ b/parameciofast/libraries/db/webmodel.py @@ -1717,3 +1717,4 @@ class QueryModel(WebModel): self.order_by="ORDER BY "+self.field_quote+self.name+self.field_quote+"."+self.field_quote+"id"+self.field_quote+" ASC" + diff --git a/parameciofast/modules/fastadmin/app.py b/parameciofast/modules/fastadmin/app.py index e392190..67998b3 100644 --- a/parameciofast/modules/fastadmin/app.py +++ b/parameciofast/modules/fastadmin/app.py @@ -9,11 +9,15 @@ from pydantic import BaseModel, Field from parameciofast.modules.fastadmin.models.admin import UserAdmin from parameciofast.libraries.db.webmodel import WebModel from parameciofast.libraries.fastutils import ResponseData +from parameciofast.libraries.db import simplequery env=env_theme(__file__) t=PTemplate(env, app.url_path_for) -useradmin=UserAdmin() +usermodel=UserAdmin() +#useradmin.create_forms() + +#useradmin.safe_query=True @admin_app.get('/', response_class=HTMLResponse) def home_admin(request: Request, paramecio_session: Annotated[str | None, Cookie(description='Cookie for validate into the admin site. The cookie name can change in you settings/config.py')] = None): @@ -50,7 +54,7 @@ def signup_admin(request: Request): num_users=cursor.fetchone()['num_users'] if num_users>0: - return RedirectResponse(app.url_path_for('signup_admin')) + return RedirectResponse(app.url_path_for('login_admin')) db.close() @@ -81,7 +85,7 @@ def check_login_admin(user: UserAdmin, request: Request) -> ResponseData: if result: - if useradmin.fields['password'].verify(user.password, result['password']): + if usermodel.fields['password'].verify(user.password, result['password']): request.session['login_admin']=True error=0 @@ -101,17 +105,17 @@ class UserSignup(BaseModel): "json_schema_extra": { "examples": [ { - "username": "johnny", + "username": "johnny5", "email": "trial@example.com", - "password": "anrandompasswordthatineverused", - "repeat_password": "anrandompasswordthatineverused", + "password": "arandompasswordthatineverused", + "repeat_password": "arandompasswordthatineverused", } ] } } @admin_app.post('/signup') -def signup_insert_admin(user: Annotated[UserSignup, Body(embed=True)], request: Request) -> ResponseData: +def signup_insert_admin(user: UserSignup, request: Request) -> ResponseData: i18n=I18n('admin', I18n.session_lang(request.session)) @@ -127,10 +131,16 @@ def signup_insert_admin(user: Annotated[UserSignup, Body(embed=True)], request: num_users=cursor.fetchone()['num_users'] if num_users: - return RedirectResponse(app.url_path_for('login_admin')) + message="You cannot add new users from here" else: - - pass + error=0 + + if not error: + + if simplequery.insert(usermodel, dict(user), db): + error=0 + message="User added!" + db.close() diff --git a/parameciofast/modules/fastadmin/templates/login.phtml b/parameciofast/modules/fastadmin/templates/login.phtml index c3e10ea..c2a2397 100644 --- a/parameciofast/modules/fastadmin/templates/login.phtml +++ b/parameciofast/modules/fastadmin/templates/login.phtml @@ -28,17 +28,20 @@ ${tlang('Login')}
-
+
- +
- ${tlang('You need a valid username and password')} +
- + +
+ ${tlang('You need a valid username and password')} +
@@ -71,69 +74,74 @@ $(document).ready( function () { - $('#login_form').submit( function () { + $('#login_form').submit( function (event) { - $('#loader-div').show(); - - $('#login_submit').prop('disabled', true); + $('#username_form').get(0).setCustomValidity(""); + $('#password_form').get(0).setCustomValidity(""); - data_form={'username': $('#username_form').val(), 'password': $('#password_form').val(), 'csrf_token': $("#csrf_token").val(), 'remember_login': 0}; + form=document.getElementById('login_form'); - $.ajax({ - url: "${url_for('check_login_admin')}", - method: "POST", - dataType: "json", - contentType : 'application/json', - data: JSON.stringify(data_form) - }).done(function(data) { + error=false; + + if (!form.checkValidity()) { + + error=true; + + } + + event.preventDefault(); + event.stopPropagation(); + + form.classList.add('was-validated'); + + if(!error) { + + $('#loader-div').show(); + + $('#login_submit').prop('disabled', true); - if(data.error==0) - { - - //location.reload() - location.href="${url_for('home_admin')}"; + data_form={'username': $('#username_form').val(), 'password': $('#password_form').val(), 'csrf_token': $("#csrf_token").val(), 'remember_login': 0}; + + $.ajax({ + url: "${url_for('check_login_admin')}", + method: "POST", + dataType: "json", + contentType : 'application/json', + data: JSON.stringify(data_form), + error: function (data) { + + console.log(JSON.stringify(data)); + $('#loader-div').hide(); + $('#login_submit').prop('disabled', false); + + alert('${tlang("Error: please, try again later")}'); - } - else - { - - $('#login_submit').prop('disabled', false); - - $('#loader-div').hide(); - - // Firefox have a horrible and stupid bug and you need attr for set de new csrf_token - - /*$('#csrf_token').attr('value', data.csrf_token); + }, + }).done(function(data) { - $('#loading').hide('slow'); - - if(data.hasOwnProperty('disable')) { + if(data.error==0) + { - $('#username_error').html("${_('Error, your user is disabled, you need support of web administration')}"); - - } if(data.hasOwnProperty('you_cannot_login')) { - - if(data.you_cannot_login) { - - $('#username_error').html("${_('Error, excessive tries, wait some minutes for login again')}"); - - } - else { - - $('#username_error').html("${_('Error, wrong username or password')}"); - - } + //location.reload() + location.href="${url_for('home_admin')}"; } - else { - - $('#username_error').html("${_('Error, wrong username or password')}"); + else + { + + $('#username_form').get(0).setCustomValidity("${tlang('Error: username or password invalid')}"); + $('#password_form').get(0).setCustomValidity("${tlang('Error: username or password invalid')}"); + + $('#login_submit').prop('disabled', false); - }*/ - - } - - }); + $('#loader-div').hide(); + + + } + + }); + + } return false; diff --git a/parameciofast/modules/fastadmin/templates/signup.phtml b/parameciofast/modules/fastadmin/templates/signup.phtml index dee1743..af4bd22 100644 --- a/parameciofast/modules/fastadmin/templates/signup.phtml +++ b/parameciofast/modules/fastadmin/templates/signup.phtml @@ -5,33 +5,33 @@ ${tlang('Signup')}
- +
- +
${tlang('You need a valid username')}
- +
${tlang('You need an email')}
- +
${tlang('You need a password')}
- +
- ${tlang('Password not equal')} + ${tlang('You need the same password in this field and not empty')}
@@ -41,8 +41,101 @@ <%block name="jscript">