first commit

This commit is contained in:
CHIEFSOFT\ameye
2025-05-03 22:16:10 -04:00
commit 108378a31e
33 changed files with 1624 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+11
View File
@@ -0,0 +1,11 @@
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config(object):
SQLALCHEMY_DATABASE_URI = os.getenv("DATABASE_URL", "sqlite://")
SQLALCHEMY_TRACK_MODIFICATIONS = False
STATIC_FOLDER = f"{os.getenv('APP_FOLDER')}/project/static"
MEDIA_FOLDER = f"{os.getenv('APP_FOLDER')}/project/media"
View File
+95
View File
@@ -0,0 +1,95 @@
"""Application Members Models"""
import os
# bson,
from dotenv import load_dotenv
from werkzeug.security import generate_password_hash, check_password_hash
import psycopg2
from psycopg2.extras import NamedTupleCursor
import pandas as pd
load_dotenv()
# DATABASE_URL=os.environ.get('DATABASE_URL') or 'mongodb://localhost:27017/myDatabase'
# print(DATABASE_URL)
# client = MongoClient(DATABASE_URL)
# db = client.myDatabase
dataUrl = os.getenv("DATABASE_URL")
db = psycopg2.connect(dataUrl)
class Members:
"""User Model"""
def __init__(self):
return
def get_member_by_uid(self, user_uid):
"""Get a user by uid"""
#user = db.members.find_one({"uid": user_uid, "active": True})
GLOBAL_AVG = "SELECT username,email,account_name,firstname,lastname FROM members WHERE uid::text = '" + user_uid + "'"
#print(GLOBAL_AVG)
with db:
with db.cursor() as cursor:
cursor.execute(GLOBAL_AVG)
account = cursor.fetchall()
#return jsonify(hello="ameye world")
# Convert to DataFrame
df = pd.DataFrame(account, columns=[desc[0] for desc in db.description])
print(df)
if not account:
return
return account
# def get_by_id(self, user_id):
# """Get a user by id"""
# user = db.users.find_one({"_id": bson.ObjectId(user_id), "active": True})
# if not user:
# return
# user["_id"] = str(user["_id"])
# user.pop("password")
# return user
def get_by_username(self, username):
"""Get a user by username"""
print(db)
# sqv = "SELECT * FROM members WHERE id=%s"
# x=["1"]
sqv = "SELECT * FROM members WHERE username='"+username+"'"
with db:
with db.cursor(cursor_factory=NamedTupleCursor) as cursor:
#with db.cursor() as cursor:
cursor.execute(sqv)
#cursor.execute(sqv, x)
member = cursor.fetchall()
if not member:
return
#member["_id"] = member[0]
#str(member[0])
return member[0]
#return user
def encrypt_password(self, password):
"""Encrypt password"""
return generate_password_hash(password)
def login(self, username, password):
"""Login a user"""
member = self.get_by_username(username)
# print('yyyyyyyyyyy---mmmmmm')
# print( member )
# print('yyyyyyyyyyy---xxxxxxxxx')
# for column in member:
# print(f"{column}")
# print( member[3] )
# print(self.encrypt_password(password))
if not member or not check_password_hash(member[3], password):
return
#member.pop(3)
#member[3]=''
return member
+1
View File
@@ -0,0 +1 @@
hi!
+45
View File
@@ -0,0 +1,45 @@
"""Validator Module"""
import re
#from bson.objectid import ObjectId
def validate(data, regex):
"""Custom Validator"""
return True if re.match(regex, data) else False
def validate_password(password: str):
"""Password Validator"""
# print(password)
#reg = r"\b^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!#%*?&]{8,20}$\b"
reg = r"\b^[A-Za-z0-9@#$%^&+=]{8,}\b"
return validate(password, reg)
def validate_username(username: str):
if not 6 <= len(username.split(' ')) <= 20:
return {
'name': 'Username must be between 6 and 15 words'
}
return True
def validate_signup_data(firstname,lastname,email):
return True
def validate_complete_signup_data(username,password,country):
return True
def validate_username_and_password(username, password):
"""Username and Password Validator"""
if not (username and password):
return {
'username': 'Username is required',
'password': 'Password is required'
}
if not validate_username(username):
return {
'username': 'Username is invalid'
}
if not validate_password(password):
return {
'password': 'Password is invalid, Should be at least 8 characters with \
upper and lower case letters, numbers and special characters'
}
return True