Пример #1
0
def auth_user(name, surname):
    try:
        # ndb.delete_multi(Models.Categorie.query(Models.Categorie.categoriaID == id).fetch(keys_only=True).get())
        usr = User().query(User.nome == name and User.cognome == surname).fetch(1)[0]
        usr.is_valid = True
        usr.put()
        return 'Utente abilitato!'
    except:
        return "Errore nell'abilitazione dell'utente!"
Пример #2
0
def change_targa(uuid, targa):
    try:
        # ndb.delete_multi(Models.Categorie.query(Models.Categorie.categoriaID == id).fetch(keys_only=True).get())
        usr = User().query(User.uuid == uuid).fetch(1)[0]
        usr.targa = targa
        usr.put()
        return True
    except:
        return False
Пример #3
0
def admin_user(name, surname):
    try:
        # ndb.delete_multi(Models.Categorie.query(Models.Categorie.categoriaID == id).fetch(keys_only=True).get())
        usr = User().query(User.nome == name and User.cognome == surname).fetch(1)[0]
        usr.has_superuser = True
        usr.put()
        return 'Utente admin!'
    except:
        return "Errore nell'admin dell'utente!"
Пример #4
0
def delete_user_from_uuid(uuid):
    try:
        # ndb.delete_multi(Models.Categorie.query(Models.Categorie.categoriaID == id).fetch(keys_only=True).get())
        User().query(User.uuid == uuid).fetch(1)[0].key.delete()
        return True
    except:
        return False
Пример #5
0
def delete_user(name, surname):
    try:
        # ndb.delete_multi(Models.Categorie.query(Models.Categorie.categoriaID == id).fetch(keys_only=True).get())
        User().query(User.nome == name and User.cognome == surname).fetch(1)[0].key.delete()
        return 'Utente rimosso!'
    except:
        return "Errore nell'eliminazione dell'utente!"
Пример #6
0
def send_email(object, text):
    administrators = User().query(User.has_superuser==True).fetch()

    if len(administrators) > 0:
        try:
            for admin in administrators:
                mail.send_mail(sender="*****@*****.**",
                               to=admin.email,
                               subject=object,
                               body=text)
            return True
        except:
            return False
    else:
        return False
Пример #7
0
def parking():
    if request.method == 'GET':
        piano = request.args.get('level')

        parks = Parking().query(Parking.piano == piano).fetch()

        # classi dipendenti dallo stato del parcheggio, utili per la modifica dello stile dei bottoni
        try:
            list_for_view = [(str(park.number), "btn btn-danger" if park.stato == 'Occupato'
                                        else "btn btn-success" if park.stato == 'Libero'
                                        else "btn btn-warning" if park.stato == 'Prenotato'
                                        else "btn btn-dark" if park.stato == 'Fuori Servizio'
                                        else "btn btn-primary") for park in parks]
            return render_template('user/prenota.html', level=piano, parking=list_for_view)
        except:
            flash('Errore nel caricamento dei parcheggi')
            redirect(url_for('main.index'))

    elif request.method == 'POST':
        # gestione pagina relativa al singolo parcheggio
        parking = request.form['parking']

        piano = parking[0]
        numero = int(parking[1:])

        park = Parking().query(Parking.piano == piano, Parking.number == numero).fetch(1)

        # se esiste il parcheggio
        if len(park) > 0:
            stato = park[0].stato

            user = User().query(User.email == session['user']['email']).fetch(1)[0]

            # targhe
            form = Prenota()
            targhe = user.targa.split(',')
            my_choices = []
            for i, tar in enumerate(targhe):
                my_choices.append((str(i + 1), tar))
            form.targa.choices = my_choices

            return render_template('user/parking.html', parking=parking, stato=stato, form=form, livello=piano)

        else:
            flash("Errore caricamento parcheggio")
            return redirect(url_for('main.index'))
Пример #8
0
def password():
    if request.method == 'GET':
        form = ModPw()
        return render_template('user/modifica_password.html', form=form, user=get_username(session))
    elif request.method == 'POST':
        try:
            pw = request.form['password']

            # modifica password nel database
            user = User.query(User.uuid == session['user']['user_id']).fetch(1)[0]
            user.password = hashlib.sha1(pw).hexdigest()
            user.put()

            # logout
            flash("Modifica password avvenuta correttamente.")
            return redirect(url_for('auth.logout'))
        except:
            flash("Erroe nella modifica. Riprova piu' tardi.")
            return redirect(url_for('main.index'))
Пример #9
0
def login_user(form):
    try:
        user_data = User.query(
            User.email == form.email.data, User.password == hashlib.sha1(
                form.password.data).hexdigest()).fetch(1)
        if len(user_data) > 0:
            session['user'] = {
                "user_id": str(user_data[0].uuid),
                "nome": user_data[0].nome,
                "cognome": user_data[0].cognome,
                "email": user_data[0].email,
                "superuser": user_data[0].has_superuser,
                "active": user_data[0].is_valid,
                "authenticated": user_data[0].is_authenticated
            }
            return session['user']['authenticated']
        else:
            return False
    except:
        return False
Пример #10
0
def prenota():
    if request.method == 'GET':
        # gestione violazione
        violazione = request.args.get('violazione')
        parcheggio = request.args.get('parcheggio')

        if violazione == "option1":
            text = "Parcheggio gia' occupato"
        elif violazione == "option2":
            text = "Il parcheggio non identifica la mia auto"

        if violazione == "option3":
            return redirect(url_for('main.violazione', parcheggio=parcheggio))
        else:
            object = "[VIOLAZIONE COMUNE]"
            text = "L'utente " + get_username(session) + ", nel parcheggio " + parcheggio + \
                   ", ha riscontrato una violazione del tipo: " + \
                   text + "." + "\nRispondi all'email: " + session['user']['email']

            if send_email(object, text):
                flash('Violazione segnalata correttamente')
            else:
                flash("Errore nella segnalazione. Ti preghiamo di riprovare piu' tardi")

            return redirect(url_for('main.index'))

    # prenotazione
    elif request.method == 'POST':
        # check if exist a booking
        uuid = session['user']['user_id']
        prenotazione = Booking.query(Booking.uuid == uuid).order(-Booking.start).fetch(1)
        if len(prenotazione) > 0:
            if prenotazione[0].start is None:
                return render_template('user/prenotazione_in_corso.html', username=get_username(session),
                                   parking=prenotazione[0].parking)
            else:
                return redirect(url_for('main.paga'))

        parking = request.form['parcheggio']
        piano = parking[0]
        numero = int(parking[1:])

        park = Parking().query(Parking.piano == piano, Parking.number == numero).fetch(1)

        # se esiste il parcheggio
        if len(park) > 0:
            park[0].stato = "Prenotato"
            park[0].put()

            idx_targa = int(request.form['targa'])
            user = User().query(User.email == session['user']['email']).fetch(1)[0]
            targhe = user.targa.split(',')
            targa = targhe[idx_targa - 1]

            # send signal to arduino (p = prenotazione)
            if not publishMQTT(parking, "p"):
                flash("Errore nella prenotazione. Riprova")
                return redirect(url_for('main.index'))

            # creo prenotazione
            book = Booking()
            book.uuid = session['user']['user_id']
            book.name = session['user']['nome']
            book.surname = session['user']['cognome']
            book.targa = targa
            book.parking = parking
            book.put()

            flash("Prenotazione effettuata correttamente")
            return redirect(url_for('main.index'))

        else:
            flash("Errore nella prenotazione. Riprova.")
            return redirect(url_for('main.index'))
Пример #11
0
def add_data():
    if request.method == 'GET':
        #utente
        usr = User()
        usr.nome = "Luca"
        usr.cognome = "Puggioninu"
        usr.uuid = str(uuid.uuid4())
        usr.password = hashlib.sha1("ciaone").hexdigest()
        usr.email = "*****@*****.**"
        usr.targa = "GF6543"
        usr.tariffa = "Tariffa 1"
        usr.is_valid = True
        usr.put()

        #admin
        usr = User()
        usr.nome = "Claudio"
        usr.cognome = "Marche"
        usr.uuid = str(uuid.uuid4())
        usr.password = hashlib.sha1("ciaone").hexdigest()
        usr.email = "*****@*****.**"
        usr.tariffa = "Tariffa 1"
        usr.targa = "GF6543"
        usr.is_valid = True
        usr.has_superuser = True
        usr.put()

        #tariffa
        tar = Tariffa()
        tar.tariffa = 'Tariffa 1'
        tar.description = "La piu' bella gazz"
        tar.prezzo = 5.00
        tar.order = 1
        tar.visibilita = True
        tar.put()

        tar = Tariffa()
        tar.tariffa = 'Tariffa 2'
        tar.description = "La meno bella gazz"
        tar.order = 2
        tar.prezzo = 5.00
        tar.visibilita = False
        tar.put()

        #parcheggi
        state = ['Libero', 'Prenotato', 'Occupato', 'Fuori Servizio']
        for piano in ['A', 'B', 'C', 'D']:
            for i in range(1, 41):
                parking = Parking()
                parking.piano = piano
                parking.number = i
                parking.stato = state[randint(0, 3)]
                parking.put()
        flash("Dati Aggiunti")
        return redirect(url_for('auth.login'))
Пример #12
0
def get_user_from_mail(mail):
    return User().query(User.email == mail).fetch()
Пример #13
0
def get_user(user_id):
    return User().query(User.uuid == user_id).fetch()
Пример #14
0
def get_users(is_valid=None):
    if is_valid == None:
        return User().query().fetch()
    else:
        return User().query(User.is_valid == is_valid).fetch()
Пример #15
0
def insert_user(form):
    try:
        check_user = User.query(User.email == form.email.data).fetch(1)
        if check_user > 0:
            u = User()
            u.uuid = str(uuid.uuid4())
            u.nome = form.nome.data
            u.cognome = form.cognome.data
            u.password = hashlib.sha1(form.password.data).hexdigest()
            u.email = form.email.data

            # insert tariffa
            tariffe = Tariffa.query(Tariffa.visibilita == True).order(
                Tariffa.order).fetch()
            for i, tar in enumerate(tariffe):
                if (i + 1) == int(form.tariffa.data):
                    u.tariffa = tar.tariffa

            u.targa = form.targa.data
            u.put()
            return True

        return False
    except:
        return False
Пример #16
0
def paga():
    if request.method == 'GET':
        uuid = session['user']['user_id']

        prenotazione = Booking.query(Booking.uuid == uuid).order(-Booking.start).fetch(1)

        if len(prenotazione) > 0:

            if prenotazione[0].start is None:
                return render_template('user/prenotazione_in_corso.html', username=get_username(session),
                                       parking=prenotazione[0].parking)
            else:
                data_inizio = prenotazione[0].start.date().strftime("%d-%m-%Y")
                ora_inizio = prenotazione[0].start.time().strftime("%H:%M:%S")

                fmt = '%Y-%m-%d %H:%M:%S'
                dat_now = datetime.now()
                datetime_str = dat_now.strftime(fmt)
                prenotazione[0].stop = datetime.strptime(datetime_str, fmt)

                data_fine = dat_now.strftime('%d-%m-%Y')
                ora_fine = dat_now.strftime('%H:%M:%S')

                usr = User().query(User.uuid == uuid).fetch(1)[0]
                tar = Tariffa().query(Tariffa.tariffa == usr.tariffa).fetch(1)[0]
                costo_tariffa = tar.prezzo

                # calcolo del costo di permanenza del veicolo
                costo = round((prenotazione[0].stop - prenotazione[0].start).total_seconds()/3600 * costo_tariffa, 2)

                prenotazione[0].costo = costo
                prenotazione[0].put()

                return render_template('user/paga.html', data_inizio=data_inizio,
                                       ora_inizio=ora_inizio, data_fine=data_fine, ora_fine=ora_fine, costo=costo)
        else:
            return render_template('user/no_pagamenti.html', username=get_username(session))

    if request.method == 'POST':
        uuid = session['user']['user_id']
        try:
            # cerca prenotazione
            book = Booking.query(Booking.uuid == uuid).order(-Booking.start).fetch(1)[0]

            # crea storico prenotazione
            hist = Historic()
            hist.uuid = uuid
            hist.name = book.name
            hist.surname = book.surname
            hist.targa = book.targa
            hist.start = book.start
            hist.stop = book.stop
            hist.parking = book.parking
            hist.costo = book.costo
            hist.put()

            # cancella prenotazione
            book.key.delete()

            # pagamento fittizio
            flash('Pagamento effettuato correttamente')
        except:
            flash('Errore nel pagamento. Riprova')
        return redirect(url_for('main.index'))
Пример #17
0
def profilo():
    if request.method == 'GET':
        form = AddPlate()
        user = User().query(User.uuid == session['user']['user_id']).fetch(1)[0]

        try:
            tar = Tariffa.query(Tariffa.tariffa == user.tariffa).fetch(1)[0]
            tariffa = tar.tariffa
            descrizione = tar.description
            prezzo = tar.prezzo
        except:
            tariffa = None
            descrizione = None
            prezzo = None

        targhe = user.targa.split(",")
        return render_template('user/profilo.html', username=get_username(session), is_admin=session['user']['superuser'],
                               form=form, tariffa=tariffa, descr_tariffa=descrizione, prezzo_tariffa=prezzo,
                               targhe=targhe)
    # cancella o aggiungi targa nel profilo
    elif request.method == 'POST':
        command = request.form['command'].split('_')
        if command[0] == "delete":
            targa = command[1]
            user = User().query(User.email == session['user']['email']).fetch(1)[0]
            targhe = user.targa.split(',')
            targhe.remove(targa)
            user.targa = ','.join(targhe)
            user.put()

        elif command[0] == "add":
            targa = request.form['targa']
            user = User().query(User.email == session['user']['email']).fetch(1)[0]

            # check if exist
            targhe = user.targa.split(",")
            if targa == "":
                flash("Targa non valida!")
            else:
                if targa not in targhe:
                    user.targa = user.targa + ',' + targa
                    targhe = user.targa.split(",")
                    user.put()
                else:
                    flash("Targa precedentemente inserita!")

        return redirect(url_for('main.profilo'))
Пример #18
0
def profilo():
    if request.method == 'GET':
        form = AddPlate()
        user = User().query(
            User.uuid == session['user']['user_id']).fetch(1)[0]
        targhe = user.targa.split(",")

        return render_template('admin/profilo.html',
                               username=get_username(session),
                               form=form,
                               targhe=targhe)
    # gestione aggiungi o cancella targa
    elif request.method == 'POST':
        command = request.form['command'].split('_')
        if command[0] == "delete":
            targa = command[1]
            user = User().query(
                User.email == session['user']['email']).fetch(1)[0]
            targhe = user.targa.split(',')
            targhe.remove(targa)
            user.targa = ','.join(targhe)
            user.put()

        elif command[0] == "add":
            targa = request.form['targa']
            user = User().query(
                User.email == session['user']['email']).fetch(1)[0]

            # check if exist
            targhe = user.targa.split(",")
            if targa == "":
                flash("Targa non valida!")
            else:
                if targa not in targhe:
                    user.targa = user.targa + ',' + targa
                    targhe = user.targa.split(",")
                    user.put()
                else:
                    flash("Targa precedentemente inserita!")
        # attesa per salvataggio in database
        time.sleep(1)
        return redirect(url_for('admin.profilo'))