forked from orson/bachemap
59 lines
2.6 KiB
Python
59 lines
2.6 KiB
Python
from flask_login import UserMixin
|
|
from flask_pymongo import PyMongo, ObjectId
|
|
from flask_wtf import FlaskForm
|
|
from datetime import datetime
|
|
from wtforms import StringField, FileField, SubmitField, DateTimeField, SelectField, PasswordField
|
|
from wtforms.validators import DataRequired, Length
|
|
#Init Mongo
|
|
from db import mongo
|
|
#User object creation
|
|
|
|
class User(UserMixin):
|
|
def __init__(self,user_data):
|
|
self.id = str(user_data['_id'])
|
|
self.username = user_data["username"]
|
|
self.referral_code = user_data["referral_code"]
|
|
self.invited_by = user_data.get('invited_by')
|
|
self.is_admin = user_data.get('is_admin', False)
|
|
seelf.pwd = user_data.get('pwd')
|
|
|
|
#Getter method
|
|
@staticmethod
|
|
def get(user_id):
|
|
user_data = mongo.db.users.find_one({"_id": ObjectId(user_id)})
|
|
if user_data:
|
|
return User(user_data)
|
|
else:
|
|
return None
|
|
|
|
#Pin creation form
|
|
class PinForm(FlaskForm):
|
|
description = StringField('¿Qué estamos viendo?', validators=[DataRequired()])
|
|
photo = FileField('Evidencia fotogénica', validators=[DataRequired()])
|
|
timedate = DateTimeField(default=datetime.now())
|
|
typeofpin = SelectField('Tipo de cosa', choices=['bache', 'coladera', 'obra sin terminar', 'escombro', 'robo-asalto', 'biciestacionamiento', 'mala iluminación', 'bici blanca', 'zapato blanco'])
|
|
submit = SubmitField('Agregar')
|
|
|
|
class LoginForm(FlaskForm):
|
|
username = StringField('Usuario', validators=[DataRequired()])
|
|
pwd = PasswordField('Tu clave', validators= [DataRequired()])
|
|
submit = SubmitField('Entrar')
|
|
|
|
#decorator to simplify mongo unique validation calls
|
|
def Unique(model, field, message=None):
|
|
def _unique(form, field_data):
|
|
if mongo.db[model.__name__.lower()].find_one({field.name: field_data.data}):
|
|
raise ValidationError(message or f"{field.name} must be unique.")
|
|
return _unique
|
|
|
|
class RegistrationForm(FlaskForm):
|
|
username = StringField('Nombre de usuarix', validators=[DataRequired(), Unique('users', StringField('username', message="Este usuario ya existe"))])
|
|
pwd = PasswordField('Clave', validators=[DataRequired(), Length(min=10), Unique('users', StringField('pwd', message="Esta clave no es muy buena, escoge otra"))])
|
|
referral = StringField('ID de quien te invito', [DataRequired()])
|
|
submit = SubmitField('Registrar')
|
|
|
|
|
|
#restrict allowed file types~
|
|
def allowed_file(filename):
|
|
return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
|