Fixes in dateform
This commit is contained in:
parent
8c6f9252c7
commit
a63ab64876
2 changed files with 61 additions and 8 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from parameciofast.libraries.db.coreforms import BaseForm
|
from parameciofast.libraries.db.coreforms import BaseForm
|
||||||
from parameciofast.libraries.mtemplates import standard_t
|
#from parameciofast.libraries.mtemplates import standard_t
|
||||||
from parameciofast.libraries.datetime import format_timedata
|
from parameciofast.libraries.datetime import format_timedata
|
||||||
|
|
||||||
class DateForm(BaseForm):
|
class DateForm(BaseForm):
|
||||||
|
|
@ -11,7 +11,7 @@ class DateForm(BaseForm):
|
||||||
super().__init__(name, value)
|
super().__init__(name, value)
|
||||||
|
|
||||||
self.yes_time=False
|
self.yes_time=False
|
||||||
self.t=standard_t
|
#self.t=standard_t
|
||||||
|
|
||||||
def form(self):
|
def form(self):
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
from fastapi import FastAPI, Cookie, Request, Response, Body
|
from fastapi import FastAPI, Cookie, Request, Response, Body, Header
|
||||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||||
from parameciofast.modules.fastadmin import admin_app
|
from parameciofast.modules.fastadmin import admin_app
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
|
|
@ -6,21 +6,29 @@ from parameciofast.fast import app
|
||||||
from parameciofast.libraries.i18n import I18n
|
from parameciofast.libraries.i18n import I18n
|
||||||
from parameciofast.libraries.mtemplates import env_theme, PTemplate
|
from parameciofast.libraries.mtemplates import env_theme, PTemplate
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
from parameciofast.modules.fastadmin.models.admin import UserAdmin
|
from parameciofast.modules.fastadmin.models.admin import UserAdmin, LoginTries
|
||||||
from parameciofast.libraries.db.webmodel import WebModel
|
from parameciofast.libraries.db.webmodel import WebModel
|
||||||
from parameciofast.libraries.fastutils import ResponseData
|
from parameciofast.libraries.fastutils import ResponseData
|
||||||
from parameciofast.libraries.db import simplequery
|
from parameciofast.libraries.db import simplequery
|
||||||
|
from settings import config
|
||||||
|
from parameciofast.libraries.datetime import now, format_local_strtime, timestamp_to_datetime, obtain_timestamp
|
||||||
|
|
||||||
env=env_theme(__file__)
|
env=env_theme(__file__)
|
||||||
t=PTemplate(env, app.url_path_for)
|
t=PTemplate(env, app.url_path_for)
|
||||||
|
|
||||||
usermodel=UserAdmin()
|
usermodel=UserAdmin()
|
||||||
|
|
||||||
|
login_tries=5
|
||||||
|
|
||||||
|
if hasattr(config, 'login_tries'):
|
||||||
|
login_tries=config.login_tries
|
||||||
|
|
||||||
#useradmin.create_forms()
|
#useradmin.create_forms()
|
||||||
|
|
||||||
#useradmin.safe_query=True
|
#useradmin.safe_query=True
|
||||||
|
|
||||||
@admin_app.get('/', response_class=HTMLResponse)
|
@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):
|
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, remote_address: Annotated[str | None, Header()] = None):
|
||||||
|
|
||||||
if not request.session.get('login_admin', None):
|
if not request.session.get('login_admin', None):
|
||||||
return RedirectResponse(app.url_path_for('login_admin'))
|
return RedirectResponse(app.url_path_for('login_admin'))
|
||||||
|
|
@ -67,8 +75,11 @@ class UserAdmin(BaseModel):
|
||||||
password: str = Field(description="The password of user")
|
password: str = Field(description="The password of user")
|
||||||
remember_login: bool | None = None
|
remember_login: bool | None = None
|
||||||
|
|
||||||
|
class ResponseDataLogin(ResponseData):
|
||||||
|
login_tries: bool
|
||||||
|
|
||||||
@admin_app.post('/login')
|
@admin_app.post('/login')
|
||||||
def check_login_admin(user: UserAdmin, request: Request) -> ResponseData:
|
def check_login_admin(user: UserAdmin, request: Request) -> ResponseDataLogin:
|
||||||
|
|
||||||
db=WebModel.connection()
|
db=WebModel.connection()
|
||||||
|
|
||||||
|
|
@ -78,7 +89,9 @@ def check_login_admin(user: UserAdmin, request: Request) -> ResponseData:
|
||||||
|
|
||||||
message=i18n.tlang('Invalid user and password')
|
message=i18n.tlang('Invalid user and password')
|
||||||
|
|
||||||
if user.username!='' and user.password!='':
|
no_login=check_login_tries(request, db)
|
||||||
|
|
||||||
|
if user.username!='' and user.password!='' and not no_login:
|
||||||
|
|
||||||
with db.query('select * from useradmin WHERE username=%s', [user.username]) as cursor:
|
with db.query('select * from useradmin WHERE username=%s', [user.username]) as cursor:
|
||||||
result=cursor.fetchone()
|
result=cursor.fetchone()
|
||||||
|
|
@ -93,7 +106,7 @@ def check_login_admin(user: UserAdmin, request: Request) -> ResponseData:
|
||||||
|
|
||||||
db.close()
|
db.close()
|
||||||
|
|
||||||
return {'error': error, 'message': message}
|
return {'error': error, 'message': message, 'login_tries': no_login}
|
||||||
|
|
||||||
class UserSignup(BaseModel):
|
class UserSignup(BaseModel):
|
||||||
username: str = Field(description="The username of new user", min_length=4, pattern=r"\w+")
|
username: str = Field(description="The username of new user", min_length=4, pattern=r"\w+")
|
||||||
|
|
@ -154,3 +167,43 @@ def logout_admin(request: Request) -> RedirectResponse:
|
||||||
|
|
||||||
return RedirectResponse(app.url_path_for('login_admin'))
|
return RedirectResponse(app.url_path_for('login_admin'))
|
||||||
|
|
||||||
|
|
||||||
|
def check_login_tries(request, db):
|
||||||
|
|
||||||
|
logintries=LoginTries(db)
|
||||||
|
|
||||||
|
logintries.safe_query()
|
||||||
|
|
||||||
|
if 'x-real-ip' in request.headers:
|
||||||
|
ip=request.headers['x-real-ip']
|
||||||
|
elif 'x-forwarded-for' in request.headers:
|
||||||
|
ip=request.headers['x-forwarded-for']
|
||||||
|
else:
|
||||||
|
ip=request.client.host
|
||||||
|
|
||||||
|
you_cannot_login=0
|
||||||
|
|
||||||
|
arr_try=logintries.set_conditions('WHERE ip=%s', [ip]).select_a_row_where()
|
||||||
|
|
||||||
|
now_str=now()
|
||||||
|
date_now=format_local_strtime('YYYY-MM-DD HH:mm:ss', now_str)
|
||||||
|
|
||||||
|
date_check=format_local_strtime('YYYY-MM-DD HH:mm:ss', timestamp_to_datetime(obtain_timestamp(now_str)-300))
|
||||||
|
|
||||||
|
logintries.query('delete from logintries where last_login<%s', [date_check])
|
||||||
|
|
||||||
|
if arr_try:
|
||||||
|
|
||||||
|
if arr_try['num_tries']<login_tries:
|
||||||
|
|
||||||
|
logintries.query('update logintries set num_tries=num_tries+1, last_login=%s WHERE ip=%s', [date_now, ip])
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
you_cannot_login=1
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
logintries.query('insert into logintries (`ip`, `num_tries`, `last_login`) VALUES (%s, %s, %s)', [ip, 1, date_now])
|
||||||
|
|
||||||
|
return you_cannot_login
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue