From 87bc64a673b468bd2a1ec8039c52f48c0bdcae20 Mon Sep 17 00:00:00 2001 From: Antonio de la Rosa Date: Mon, 15 Jul 2019 00:23:43 +0200 Subject: [PATCH] Added new fields: usernamefield and fix in passwordfield --- paramecio/citoplasma/lists.py | 21 +++++++++++++++++-- .../cromosoma/extrafields/passwordfield.py | 4 +++- .../cromosoma/extrafields/usernamefield.py | 16 ++++++++++++++ 3 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 paramecio/cromosoma/extrafields/usernamefield.py diff --git a/paramecio/citoplasma/lists.py b/paramecio/citoplasma/lists.py index 6c6ab4b..d8f92aa 100644 --- a/paramecio/citoplasma/lists.py +++ b/paramecio/citoplasma/lists.py @@ -254,6 +254,7 @@ class AjaxList(SimpleList): self.str_query_params=str_query[1] self.initial_num_pages=20 self.db=db + self.func_fields={} def show(self): @@ -293,7 +294,10 @@ class AjaxList(SimpleList): with self.db.query(self.count_query, self.count_query_params) as cursor: total_elements=cursor.fetchone()['num_elements'] - str_query=self.str_query+' '+order_sql+' limit %s, %s' + str_query=self.str_query+' '+order_sql + + if self.limit>0: + str_query+=' limit %s, %s' params=self.str_query_params params.append(begin_page) @@ -301,7 +305,20 @@ class AjaxList(SimpleList): with self.db.query(str_query, params) as cursor: for row in cursor: - rows.append(row) + """ + c=len(self.arr_order_fields) + for x in range(c, len(row)): + key_field=list(row.keys())[x] + #print(key_field) + pass + """ + + for func_field in self.func_fields: + if func_field in row: + row[func_field]=self.func_fields[func_field](row[func_field]) + + rows.append(row) + #{k:d[k] for in set(d).intersection(l)} pages=Pages() diff --git a/paramecio/cromosoma/extrafields/passwordfield.py b/paramecio/cromosoma/extrafields/passwordfield.py index 78fe1f8..9c4cce0 100644 --- a/paramecio/cromosoma/extrafields/passwordfield.py +++ b/paramecio/cromosoma/extrafields/passwordfield.py @@ -11,6 +11,7 @@ class PasswordField(PhangoField): self.protected=True self.name_form=PasswordForm self.default_value='' + self.encrypt_password=True def check(self, value): @@ -41,7 +42,8 @@ class PasswordField(PhangoField): #if crypt.METHOD_SHA512 in crypt.methods: #salt=crypt.mksalt(crypt.METHOD_SHA512) - value=crypt.crypt(value) + if self.encrypt_password: + value=crypt.crypt(value) """ else: diff --git a/paramecio/cromosoma/extrafields/usernamefield.py b/paramecio/cromosoma/extrafields/usernamefield.py new file mode 100644 index 0000000..0ac0413 --- /dev/null +++ b/paramecio/cromosoma/extrafields/usernamefield.py @@ -0,0 +1,16 @@ +from paramecio.cromosoma.corefields import PhangoField +from paramecio.cromosoma.coreforms import PasswordForm +from hmac import compare_digest as compare_hash +import crypt +import re + +class UserNameField(PhangoField): + + def check(self, value): + + if not re.match("^[A-Za-z0-9_-]+$", value): + self.txt_error='Error: use only letters, numbers, underscores and dashes for this field' + self.error=1 + value='' + + return value