示例#1
0
def createIsValid(formCU, oldEmail=None, oldUsuario=None, usuarioSesion=False):
    ok = True
    msj = ""
    if not formCU.validate():
        ok = False
    if (not re.match(
            r"^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$",
            request.form['email'])):
        ok = False
        formCU.email.errors.append("Ingrese un email válido")
    else:
        #valido si existe el email
        if oldEmail == None or oldEmail != request.form['email']:
            if User.find_by_email(request.form['email']):
                ok = False
                formCU.email.errors.append("El email ya existe")
    if (not re.match(r"^[a-zA-Z0-9]*$", request.form['usuario'])):
        ok = False
        formCU.usuario.errors.append(
            "Solo puede contener caracteres alfanuméricos")
    else:
        #valido si existe el nombre de usuario
        if oldUsuario == None or oldUsuario != request.form['usuario']:
            if User.find_by_username(request.form['usuario']):
                ok = False
                formCU.usuario.errors.append("El usuario ya existe")
    if not usuarioSesion and not request.form.getlist("roles"):
        ok = False
        msj = "Seleccione al menos un rol"
    if not ok:
        raise Exception(msj)
    return ok
示例#2
0
def update():
    #Auth check
    auth.authenticated_or_401()

    if request.method == "POST":
        User.db = get_db()
        if (not User.has_permission(session['id'],'usuario_update')):
            abort(401)
        else:
            post_data = request.get_json() #Obtención de información
            errors = [] #Errores

            #Chequeo username
            if User.find_by_username_not_self(post_data):                
                errors.append({'name': 'username', 'message': 'El nombre de usuario ingresado ya existe'})
            #Chequeo email
            if User.find_by_email_not_self(post_data):
                errors.append({'name': 'email', 'message': 'El email ingresado ya existe'})

            form = forms.ValidateUserWithOutPassword.from_json(post_data, skip_unknown_keys=True)
            if (form.validate() and len(errors) == 0):
                User.update(post_data)
                new_user = User.find_by_email(post_data['email'])
                update_roles(new_user['user_id'], post_data)
                response_object = {'status': 'success', 'message': 'Se actualizó el nuevo usuario'}
            else:
                if (not form.validate()):
                    err = {'name': 'fields', 'message': 'Verifica los campos obligatorios y no ingreses nombres no permitidos.'}
                    errors.append(err)
                response_object = errors
            return jsonify(response_object)
示例#3
0
def google_callback(client):
    User.db = get_db()

    code = request.args.get("code")
    google_provider_cfg = requests.get(Config.GOOGLE_DISCOVERY_URL).json()
    token_endpoint = google_provider_cfg["token_endpoint"]

    token_url, headers, body = client.prepare_token_request(
        token_endpoint,
        authorization_response=request.url,
        redirect_url=request.base_url,
        code=code)
    token_response = requests.post(
        token_url,
        headers=headers,
        data=body,
        auth=(Config.GOOGLE_CLIENT_ID, Config.GOOGLE_CLIENT_SECRET),
    )

    # Parse the tokens!
    client.parse_request_body_response(json.dumps(token_response.json()))
    userinfo_endpoint = google_provider_cfg["userinfo_endpoint"]
    uri, headers, body = client.add_token(userinfo_endpoint)
    userinfo_response = requests.get(uri, headers=headers, data=body)

    # raise Exception(userinfo_response.json())
    response = userinfo_response.json()

    user = User.find_by_email(response["email"])
    is_new = False
    status = True
    if not user:
        # google => oeberisso
        # ------------------------
        # given_name => first_name
        # family_name => last_name
        # email => email

        username, dom = response["email"].split('@')
        User.create_from_google(response["email"], username,
                                response["given_name"],
                                response["family_name"])
        msg = "Se creo el usuario"
        is_new = True

    if not is_new and status and user["active"] == 0:
        msg = "El usuario no se encuentra activo."
        status = False

    if status:
        session["user"] = username if is_new else user["username"]
        if not is_new:
            msg = "La sesión se inició correctamente."

    return jsonify({
        "status": status,
        "msg": msg,
        "username": session["user"],
        "email": response["email"],
    })
示例#4
0
def authenticate_by_google(user_info):
    User.db = get_db()
    user = User.find_by_email(user_info['email'])
    if not user:
        User.create_by_google(user_info)
        user = User.find_by_username(user_info['email'])
    login(user)
    return True
示例#5
0
def unique_mail(js, field, username=""):
    User.db = get_db()
    user = User.find_by_email(field)
    if user != None and user["username"] != username:
        if js: return "Este mail ya se encuentra registrado"

        flash("El mail que intenta utilizar ya existe", "negative")
        return 1
    else:
        return 0
示例#6
0
def create():
    #Auth check
    auth.authenticated_or_401()

    if request.method == "POST":
        User.db = get_db()
        if (not User.has_permission(session['id'],'usuario_new')):
            abort(401)
        else:
            post_data = request.get_json() #Obtención de información
            errors = [] #Errores

            #Chequeo username
            if User.find_by_username(post_data['username']):                
                errors.append({'name': 'username', 'message': 'El nombre de usuario ingresado ya existe'})
            #Chequeo email
            if User.find_by_email(post_data['email']):
                errors.append({'name': 'email', 'message': 'El email ingresado ya existe'})
            #Chequeo passwords
            if (post_data['password'] != post_data['password_confirm']):
                errors.append({'name': 'password', 'message': 'Las contraseñas ingresadas no coinciden'})

            form = forms.ValidateUser.from_json(post_data, skip_unknown_keys=True)
            if (form.validate() and len(errors) == 0):
                #Password hashing
                password = sha256_crypt.encrypt(post_data['password'])
                #Creacion de usuario
                User.create(post_data, password)
                new_user = User.find_by_email(post_data['email'])
                update_roles(new_user['user_id'], post_data)
                response_object = {'status': 'success', 'message': 'Se agregó el nuevo usuario'}
            else:
                if (not form.validate()):
                    err = {'name': 'fields', 'message': 'Verifica los campos obligatorios y no ingreses nombres no permitidos.'}
                    errors.append(err)
                response_object = errors
            return jsonify(response_object)
示例#7
0
def store():
    if not authenticated(session):
        abort(401)
    #Chequea permiso
    User.db = get_db()
    if (User.tiene_permiso(session['id'], 'usuario_new')):
        if request.method == "POST" and forms.ValidateUser(
                request.form).validate():
            if (request.form['password'] != request.form['password_repeat']):
                flash('Las contraseñas no coinciden', 'error')
            #verifica los roles enviados
            elif (request.form.get("rol1")
                  == None) and (request.form.get("rol2")
                                == None) and (request.form.get("rol3")
                                              == None):
                flash('Debes elegir al menos un rol de usuario', 'error')
            #Chequea la existencia del usuario
            elif User.find_by_username(request.form['username']):
                flash("Ya existe un usuario con ese nombre de usuario",
                      'error')
            elif User.find_by_email(request.form['email']):
                flash("Ya existe un usuario con ese email", 'error')
            else:
                User.create(request.form)
                user = User.find_by_email_and_pass(request.form['email'],
                                                   request.form['password'])
                if request.form.get("rol1") != None:
                    User.set_role(user['id'], 1)
                if request.form.get("rol2") != None:
                    User.set_role(user['id'], 2)
                if request.form.get("rol3") != None:
                    User.set_role(user['id'], 3)
                flash("Usuario agregado correctamente", 'success')
        else:
            flash(
                'Verifica los campos obligatorios. No ingreses valores no permitidos',
                'error')
        return redirect(url_for('panel_usuarios'))
    else:
        abort(401)
示例#8
0
def create():
    if not authenticated(session):
        abort(401)
    page = request.args.get('pagina')

    permisos = User.misPermisos(session['id'])

    Configuracion.db = get_db()
    config = Configuracion.all()

    data = request.form

    Estudiante.db = get_db()
    estudiante = Estudiante.find_by_documento(data['numero_doc'])

    User.db = get_db()
    user = User.find_by_email(data['email'])
    userDoc = User.find_by_documento(data['numero_doc'])

    users = User.all(page, config['paginacion'])
    rango = User.rangoAll(config['paginacion'])

    if validateCreateUser(data) == False:
        flash("Todos los campos son obligatorios.")
        return redirect(url_for('user_new', user=user))

    if user:
        flash("El email ya existe.")
        return redirect(url_for('user_new', user=user))

    if estudiante:
        flash("El documento ya existe.")
        return redirect(url_for('user_new', user=user))

    if userDoc:
        flash("El documento ya existe.")
        return redirect(url_for('user_new', user=user))

    User.create(data)  #agarro los datos del formulario
    return redirect(url_for('user_index', pagina=0))