Fix in sessions, datetime, etc
This commit is contained in:
parent
63e091221e
commit
dff9269695
13 changed files with 2831 additions and 646 deletions
|
|
@ -4,6 +4,10 @@ from collections import OrderedDict
|
||||||
from paramecio.citoplasma.sessions import get_session
|
from paramecio.citoplasma.sessions import get_session
|
||||||
from paramecio.citoplasma.urls import make_url
|
from paramecio.citoplasma.urls import make_url
|
||||||
from paramecio.citoplasma.i18n import I18n
|
from paramecio.citoplasma.i18n import I18n
|
||||||
|
from paramecio.citoplasma.httputils import GetPostFiles
|
||||||
|
from paramecio.citoplasma.keyutils import create_key_encrypt, create_key_encrypt_256, create_key
|
||||||
|
from bottle import response,request
|
||||||
|
from paramecio.cromosoma.webmodel import WebModel
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
||||||
|
|
@ -130,3 +134,116 @@ def check_login():
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def login_model(ModelLogin, session=''):
|
||||||
|
|
||||||
|
""" Function for standard login
|
||||||
|
"""
|
||||||
|
|
||||||
|
connection=WebModel.connection()
|
||||||
|
|
||||||
|
user_admin=ModelLogin(connection)
|
||||||
|
|
||||||
|
getpostfiles=GetPostFiles()
|
||||||
|
|
||||||
|
getpostfiles.obtain_post()
|
||||||
|
|
||||||
|
getpostfiles.post['username']=getpostfiles.post.get('username', '')
|
||||||
|
getpostfiles.post['password']=getpostfiles.post.get('password', '')
|
||||||
|
|
||||||
|
username=user_admin.fields['username'].check(getpostfiles.post['username'])
|
||||||
|
|
||||||
|
password=getpostfiles.post['password'].strip()
|
||||||
|
|
||||||
|
user_admin.conditions=['WHERE username=%s', [username]]
|
||||||
|
|
||||||
|
arr_user=user_admin.select_a_row_where(['id', 'password', 'privileges', 'lang', 'num_tries', 'email'])
|
||||||
|
|
||||||
|
if arr_user==False:
|
||||||
|
|
||||||
|
s=get_session()
|
||||||
|
|
||||||
|
s['csrf_token']=create_key_encrypt()
|
||||||
|
|
||||||
|
s.save()
|
||||||
|
connection.close()
|
||||||
|
return {'error': 1, 'csrf_token': s['csrf_token']}
|
||||||
|
else:
|
||||||
|
|
||||||
|
num_tries=int(arr_user['num_tries'])
|
||||||
|
|
||||||
|
if arr_user['num_tries']<3:
|
||||||
|
|
||||||
|
if user_admin.fields['password'].verify(password, arr_user['password']):
|
||||||
|
|
||||||
|
s=get_session()
|
||||||
|
|
||||||
|
s[session+'id']=arr_user['id']
|
||||||
|
s[session+'login']=1
|
||||||
|
s[session+'privileges']=arr_user['privileges']
|
||||||
|
s[session+'lang']=arr_user['lang']
|
||||||
|
s[session+'email']=arr_user['email']
|
||||||
|
|
||||||
|
if s['lang']=='':
|
||||||
|
s['lang']=I18n.default_lang
|
||||||
|
|
||||||
|
remember_login=getpostfiles.post.get(session+'remember_login', '0')
|
||||||
|
|
||||||
|
if remember_login=='1':
|
||||||
|
|
||||||
|
timestamp=time()+315360000
|
||||||
|
|
||||||
|
random_text=create_key_encrypt()
|
||||||
|
|
||||||
|
#Update user with autologin token
|
||||||
|
|
||||||
|
user_admin.check_user=False
|
||||||
|
|
||||||
|
user_admin.conditions=['WHERE username=%s', [username]]
|
||||||
|
|
||||||
|
user_admin.valid_fields=['token_login']
|
||||||
|
|
||||||
|
user_admin.reset_require()
|
||||||
|
|
||||||
|
if user_admin.update({'token_login': random_text}):
|
||||||
|
|
||||||
|
response.set_cookie(session+'remember_login', random_text, path=config.session_opts['session.path'], expires=timestamp, secret=key_encrypt)
|
||||||
|
#else:
|
||||||
|
#print(user_admin.query_error)
|
||||||
|
s.save()
|
||||||
|
|
||||||
|
connection.close()
|
||||||
|
|
||||||
|
return {'error': 0}
|
||||||
|
else:
|
||||||
|
|
||||||
|
user_admin.check_user=False
|
||||||
|
|
||||||
|
user_admin.conditions=['WHERE username=%s', [username]]
|
||||||
|
|
||||||
|
user_admin.valid_fields=['num_tries']
|
||||||
|
|
||||||
|
user_admin.reset_require()
|
||||||
|
|
||||||
|
user_admin.update({'num_tries': arr_user['num_tries']+1})
|
||||||
|
|
||||||
|
s=get_session()
|
||||||
|
|
||||||
|
s['csrf_token']=create_key_encrypt()
|
||||||
|
|
||||||
|
s.save()
|
||||||
|
|
||||||
|
connection.close()
|
||||||
|
|
||||||
|
return {'error': 1, 'csrf_token': s['csrf_token']}
|
||||||
|
else:
|
||||||
|
s=get_session()
|
||||||
|
|
||||||
|
s['csrf_token']=create_key_encrypt()
|
||||||
|
|
||||||
|
s.save()
|
||||||
|
|
||||||
|
connection.close()
|
||||||
|
|
||||||
|
return {'error': 1, 'csrf_token': s['csrf_token']}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -290,7 +290,7 @@ def no_utc(timestamp):
|
||||||
|
|
||||||
class TimeClass:
|
class TimeClass:
|
||||||
|
|
||||||
def __init__(self, timestamp=0, tz=''):
|
def __init__(self, timestamp=None, tz=''):
|
||||||
|
|
||||||
self.utc=False
|
self.utc=False
|
||||||
|
|
||||||
|
|
@ -307,16 +307,22 @@ class TimeClass:
|
||||||
self.tz=tz
|
self.tz=tz
|
||||||
|
|
||||||
if type(timestamp).__name__=='int':
|
if type(timestamp).__name__=='int':
|
||||||
|
"""
|
||||||
if self.utc:
|
if self.utc:
|
||||||
|
|
||||||
self.datetime=utcnow()
|
self.datetime=utcnow()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
"""
|
||||||
self.datetime=timestamp_to_datetime(timestamp)
|
self.datetime=timestamp_to_datetime(timestamp)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
|
if not timestamp:
|
||||||
|
|
||||||
|
self.datetime=now(self.utc, tz)
|
||||||
|
|
||||||
|
else:
|
||||||
self.datetime=timestamp
|
self.datetime=timestamp
|
||||||
|
|
||||||
y, m, d, h, mi, s=format_timedata(self.datetime)
|
y, m, d, h, mi, s=format_timedata(self.datetime)
|
||||||
|
|
@ -359,6 +365,18 @@ class TimeClass:
|
||||||
|
|
||||||
return m.format(self.format_time)
|
return m.format(self.format_time)
|
||||||
|
|
||||||
|
def add_hour(self, num_hours):
|
||||||
|
|
||||||
|
m=self.t.shift(hours=+num_hours)
|
||||||
|
|
||||||
|
return m.format(self.format_time)
|
||||||
|
|
||||||
|
def substract_hour(self, num_hours):
|
||||||
|
|
||||||
|
m=self.t.shift(hours=-num_hours)
|
||||||
|
|
||||||
|
return m.format(self.format_time)
|
||||||
|
|
||||||
def format(self):
|
def format(self):
|
||||||
|
|
||||||
return self.t.format(self.format_date_full)
|
return self.t.format(self.format_date_full)
|
||||||
|
|
|
||||||
|
|
@ -176,7 +176,12 @@ else:
|
||||||
|
|
||||||
s={'token': token}
|
s={'token': token}
|
||||||
|
|
||||||
|
# Bug in python 3.6, if you put max_age how None, is passed to header cookie.
|
||||||
|
|
||||||
|
if not max_age:
|
||||||
response.set_cookie(config.cookie_name, token, path=config.session_opts['session.path'])
|
response.set_cookie(config.cookie_name, token, path=config.session_opts['session.path'])
|
||||||
|
else:
|
||||||
|
response.set_cookie(config.cookie_name, token, path=config.session_opts['session.path'], max_age=max_age)
|
||||||
#Set-Cookie: phango_session=n2ro4lghim75p8vjseb5v3lhap; path=/experiment2/
|
#Set-Cookie: phango_session=n2ro4lghim75p8vjseb5v3lhap; path=/experiment2/
|
||||||
#response.set_header('Set-Cookie', '%s=%s; path=%s' % (config.cookie_name, token, config.session_opts['session.path']) )
|
#response.set_header('Set-Cookie', '%s=%s; path=%s' % (config.cookie_name, token, config.session_opts['session.path']) )
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ class IntegerField(PhangoField):
|
||||||
|
|
||||||
def __init__(self, name, size=11, required=False):
|
def __init__(self, name, size=11, required=False):
|
||||||
super(IntegerField, self).__init__(name, size, required)
|
super(IntegerField, self).__init__(name, size, required)
|
||||||
|
self.default_value=0
|
||||||
|
|
||||||
def check(self, value):
|
def check(self, value):
|
||||||
|
|
||||||
|
|
@ -83,6 +84,7 @@ class FloatField(PhangoField):
|
||||||
super(FloatField, self).__init__(name, size, required)
|
super(FloatField, self).__init__(name, size, required)
|
||||||
|
|
||||||
self.error_default="The value is zero"
|
self.error_default="The value is zero"
|
||||||
|
self.default_value=0
|
||||||
|
|
||||||
def check(self, value):
|
def check(self, value):
|
||||||
|
|
||||||
|
|
@ -207,6 +209,7 @@ class BooleanField(IntegerField):
|
||||||
super(IntegerField, self).__init__(name, size, required)
|
super(IntegerField, self).__init__(name, size, required)
|
||||||
|
|
||||||
self.default_error="Need 0 or 1 value"
|
self.default_error="Need 0 or 1 value"
|
||||||
|
self.default_value=0
|
||||||
|
|
||||||
def check(self, value):
|
def check(self, value):
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1189,6 +1189,14 @@ class WebModel:
|
||||||
self.fields_errors[k].append("Error: "+v.label+" field required")
|
self.fields_errors[k].append("Error: "+v.label+" field required")
|
||||||
error=True
|
error=True
|
||||||
|
|
||||||
|
elif v.required==False and k!=self.name_field_id and not yes_update:
|
||||||
|
|
||||||
|
fields.append(k)
|
||||||
|
|
||||||
|
values.append(self.fields[k].default_value)
|
||||||
|
|
||||||
|
update_values.append(f_update(k, self.fields[k].default_value))
|
||||||
|
|
||||||
if len(fields)==0:
|
if len(fields)==0:
|
||||||
|
|
||||||
self.num_errors+=1
|
self.num_errors+=1
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ from paramecio.citoplasma.sessions import get_session, generate_session
|
||||||
from bottle import get,post,response,request
|
from bottle import get,post,response,request
|
||||||
from settings import config
|
from settings import config
|
||||||
from settings import config_admin
|
from settings import config_admin
|
||||||
from paramecio.citoplasma.adminutils import get_menu, get_language, make_admin_url, check_login
|
from paramecio.citoplasma.adminutils import get_menu, get_language, make_admin_url, check_login, login_model
|
||||||
from paramecio.citoplasma.httputils import GetPostFiles
|
from paramecio.citoplasma.httputils import GetPostFiles
|
||||||
from paramecio.cromosoma.formsutils import show_form, pass_values_to_form, set_extra_forms_user
|
from paramecio.cromosoma.formsutils import show_form, pass_values_to_form, set_extra_forms_user
|
||||||
from paramecio.cromosoma.coreforms import PasswordForm
|
from paramecio.cromosoma.coreforms import PasswordForm
|
||||||
|
|
@ -251,6 +251,9 @@ def home(module='', submodule='', t=t):
|
||||||
@app.post('/'+config.admin_folder+'/login')
|
@app.post('/'+config.admin_folder+'/login')
|
||||||
def login():
|
def login():
|
||||||
|
|
||||||
|
return login_model(UserAdmin)
|
||||||
|
|
||||||
|
"""
|
||||||
connection=WebModel.connection()
|
connection=WebModel.connection()
|
||||||
|
|
||||||
user_admin=UserAdmin(connection)
|
user_admin=UserAdmin(connection)
|
||||||
|
|
@ -357,7 +360,7 @@ def login():
|
||||||
connection.close()
|
connection.close()
|
||||||
|
|
||||||
return {'error': 1, 'csrf_token': s['csrf_token']}
|
return {'error': 1, 'csrf_token': s['csrf_token']}
|
||||||
|
"""
|
||||||
|
|
||||||
@app.post('/'+config.admin_folder+'/register')
|
@app.post('/'+config.admin_folder+'/register')
|
||||||
def register():
|
def register():
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
Before Width: | Height: | Size: 348 KiB After Width: | Height: | Size: 434 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue