Beispiel #1
0
def comment():
    form = TextFormular()
    if form.validate_on_submit():
        dbUser = DBUser.LoadFromSession('dbUserRegistration')
        dbUser.info = form.comment.data
        dbUser.id = DBAccess.GetSequencerNextVal('users_id_seq')
        dbUser.telephone2 = form.telephone.data
        dbUser.InsertDB()
        response = RenameImageToPrivate(session['cloudinaryId'],
                                        (str(dbUser.id) + 'OP'))
        imageUrl = response['url']

        ts = URLSafeTimedSerializer(app.config["SECRET_KEY"])
        token = ts.dumps(dbUser.id, salt='email-confirm-key')
        confirm_url = url_for('login_bp.user_confirmation',
                              token=token,
                              _external=True)

        SendMail(
            GetEmail('noreplyMail'), GetEmail('adminMail'),
            'Zaregistrován nový uživatel',
            f'''<html>Nový uživatel zaregistrovan, čeká na schválení. <br>
         <img src={GetImageUrl(dbUser.id)}>foto</img> 
         <br> <img src={imageUrl}>OP</img> 
         <br> jméno a příjmení: {dbUser.first_name} {dbUser.surname}
         <br> email: {dbUser.email}
         <br> telefon: {dbUser.telephone}
         <br> adresa: {dbUser.street}, {dbUser.town}
         <br> info: {dbUser.info} 
         <br> telefon na kontaktní osobu (seniora registruje někdo jiný): {dbUser.telephone2}
         <br> Pro schválení uživatele klikněte na následující link {confirm_url} </html>'''
        )
        SendMail(
            GetEmail('noreplyMail'), '*****@*****.**',
            'Zaregistrován nový uživatel',
            f'''<html>Nový uživatel zaregistrovan, čeká na schválení. <br>
         <img src={GetImageUrl(dbUser.id)}>foto</img> 
         <br> <img src={imageUrl}>OP</img> 
         <br> jméno a příjmení: {dbUser.first_name} {dbUser.surname}
         <br> email: {dbUser.email}
         <br> telefon: {dbUser.telephone}
         <br> adresa: {dbUser.street}, {dbUser.town}
         <br> info: {dbUser.info},
          <br> telefon na kontaktní osobu (seniora registruje někdo jiný): {dbUser.telephone2},
         <br> Pro schválení uživatele klikněte na následující link {confirm_url} </html>'''
        )
        SendMail(
            GetEmail('noreplyMail'), '*****@*****.**',
            'Zaregistrován nový uživatel',
            f'<html>Nový uživatel zaregistrovan, čeká na schválení. <br> <img src={GetImageUrl(dbUser.id)}>foto</img> <br> <img src={imageUrl}>OP</img> <br> údaje: {dbUser.__dict__} <br> Pro schválení uživatele klikněte na následující link {confirm_url}'
        )
        flash(
            f'Registrace uživatele {dbUser.first_name} {dbUser.surname} úspěšně dokončena. Váš profil nyní musíme zkontrolovat. Zabere nám to maximálně 48 hodin. Prosíme, mějte strpení. Ruční ověřování považujeme za nezbytnost kvůli bezpečnosti. O schválení vás budeme informovat emailem.',
            FlashStyle.Success)
        SendMail(
            GetEmail('noreplyMail'), dbUser.email, 'Registrace na Seniore.org',
            'Děkujeme za vaši registraci na Seniore.org. Váš profil nyní musíme zkontrolovat. Zabere nám to maximálně 48 hodin. Prosíme, mějte strpení. Ruční ověřování považujeme za nezbytnost kvůli bezpečnosti. O schválení vás budeme informovat emailem. Děkujeme, tým Seniore.org'
        )
        return redirect(url_for("login_bp.login"))
    return render_template("/registraceComment.html", form=form)
Beispiel #2
0
def register(req):
    if req.session.get('is_login', None):
        return redirect('/index/')
    if req.method == 'POST':
        register_form = forms.RegisterForm(req.POST)
        message = "请检查填写的内容"
        if register_form.is_valid():
            username = register_form.cleaned_data.get('username')
            password1 = register_form.cleaned_data.get('password1')
            password2 = register_form.cleaned_data.get('password2')
            email = register_form.cleaned_data.get('email')
            sex = register_form.cleaned_data.get('sex')
            chkcode = register_form.cleaned_data.get('chkcode')
            print(username, password1, password2, email, chkcode, sex)

            # 验证码校验,一分钟之内的
            current_date = datetime.datetime.now()
            limit_day = current_date - datetime.timedelta(minutes=1)
            is_valid_code = models.SendMsg.objects.filter(
                email=email, code=chkcode, ctime__gt=limit_day).count()
            if not is_valid_code:
                message = "输入的验证码不正确或者已经过期!!"
                return render(req, 'login/register.html', locals())
            if password1 != password2:
                message = "两次输入的密码不相同"
                return render(req, 'login/register.html', locals())
            else:
                same_name_user = models.User.objects.filter(name=username)
                if same_name_user:
                    message = "用户名已经存在"
                    return render(req, 'login/register.html', locals())

                same_email_user = models.User.objects.filter(email=email)
                if same_email_user:
                    print('user exitlllldddd')
                    message = "邮箱已经注册"
                    return render(req, 'login/register.html', locals())
            new_user = models.User()
            new_user.name = username
            new_user.password = password1
            new_user.email = email
            new_user.sex = sex
            new_user.save()
            # generate number
            code = make_confirm_string(new_user)
            # send mail
            SendMail.send_email(email, code)
            message = '请前往邮箱进行确认!'
            return render(req, 'login/login.html', locals())
    register_form = forms.RegisterForm()
    return render(req, 'login/register.html', locals())
Beispiel #3
0
def lost_password():
    emailForm = EmailForm()

    if emailForm.validate_on_submit():
        sleep(3)
        if DBAccess.ExecuteScalar('select id from users where email ilike %s',
                                  (emailForm.email.data, )) is None:
            flash(
                f'Uživatel {emailForm.email.data} nebyl nalezen, zvolte jiný email.',
                FlashStyle.Danger)
            emailForm.email.data = None
            return render_template("registrace_email.html", form=emailForm)
        else:
            ts = URLSafeTimedSerializer(app.config["SECRET_KEY"])
            token = ts.dumps(emailForm.email.data, salt='email-renew-key')
            confirm_url = url_for('login_bp.new_password',
                                  token=token,
                                  _external=True)
            email_text = f'Prosím klikněte na následující odkaz pro zadání nového hesla.<br>Tento odkaz bude platný následujících 24 hodin.<br>{confirm_url}'
            SendMail(GetEmail('noreplyMail'), emailForm.email.data,
                     'Seniore.cz - obnova zapomenutého hesla', email_text)
            flash(
                "Na zadanou adresu byl odeslán email s odkazem na obnovu hesla.",
                FlashStyle.Success)
            emailForm.submit.label.text = "Odeslat email znovu"
            return render_template("lost_password.html", form=emailForm)
    return render_template("lost_password.html", form=emailForm)
Beispiel #4
0
def user_confirmation(token):
    try:
        ts = URLSafeTimedSerializer(app.config["SECRET_KEY"])
        user_id = ts.loads(token, salt="email-confirm-key")
    except:
        abort(403)
    dbUser = DBAccess.GetDBUserById(user_id)
    DBAccess.ExecuteUpdate('update users set level=1 where id=%s', (user_id, ))
    email_text = f'''<html> Dobrý den, 
    <br>
    <br> Váš účet byl ověřen a nyní se můžete <a href="https://app.seniore.org/login/">přihlásit </a>. (Pokud odkaz nefunguje, prosíme, je nutné ho zkopírovat a celý vložit do vašeho prohlížeče.)<br> 
    <br> 
    Věnujte prosím chviličku instrukcím, jak aplikaci používat. <br> 
    1. Na mapce uvidíte svojí polohu. V blízkosti se zobrazí lidé, kteří mohou pomoci, nebo pomoc potřebují. <br>
    Je možné, že se ve Vaší lokalitě zatím nikdo nepřihlásil. Kontaktujte prosím kohokoliv, kdo by se mohl zapojit. <br>
    2. Pro ostatní uživatele jste zatím neviditení! Abyste se i vy zobrazil jiným uživatelům, je potřeba kliknout na tlačítko “Zobrazit mě na mapě” na kartě "Vyhledat".<br>
    V následujícím kroku vyplníte, zda pomoc potřebujete, nebo jí můžete poskytnout.<br>
    3. Kliknutím na Pin (znaménko v mapě) u jiného uživatele jej můžete kontaktovat. Přijde Vám i jí/jemu mail, který Vás vzájemně propojí. Domluvíte se potom už sami.<br>
    <br>
    Budete-li mít jakékoliv dotazy, pište na [email protected].<br>
    Pojďme společně obnovit svět, kde si sousedé pomáhají.<br>
    <br>
    Váš tým Seniore
    </html>'''

    SendMail(GetEmail('noreplyMail'), dbUser.email,
             'Seniore.org - ověření účtu', email_text)

    return f'Uživatel {dbUser.first_name} {dbUser.surname} byl nastaven jako schválený a byl mu odeslán informační email.'
Beispiel #5
0
def registration_email():
    emailForm = EmailForm()

    if emailForm.validate_on_submit():
        sleep(3)
        if request.form.getlist('conditionsAccept') != ['1', '2']:
            flash(f'Je potřeba souhlasit s podmínkami.', FlashStyle.Danger)
            return render_template("registrace_email.html", form=emailForm)
        if DBAccess.ExecuteScalar(
                'select id from users where trim(email) ilike %s',
            (emailForm.email.data.strip(), )) is not None:
            flash(
                f'Uživatel {emailForm.email.data} je již zaregistrován, zvolte jiný email.',
                FlashStyle.Danger)
            emailForm.email.data = None
            return render_template("registrace_email.html", form=emailForm)
        else:
            ts = URLSafeTimedSerializer(app.config["SECRET_KEY"])
            token = ts.dumps(emailForm.email.data.strip(),
                             salt='email-confirm-key')
            confirm_url = url_for('login_bp.email_confirmation',
                                  token=token,
                                  _external=True)
            email_text = f'Prosím klikněte na následující odkaz pro ověření vašeho emailu a pokračování v registraci.<br>Tento odkaz bude platný následujících 24 hodin.<br>{confirm_url} <br> Pokud odkaz nefunguje, prosíme, je nutné ho zkopírovat a celý vložit do vašeho prohlížeče.'
            SendMail(GetEmail('noreplyMail'), emailForm.email.data.strip(),
                     'Seniore.org - ověření emailu', email_text)
            #flash("Na zadanou adresu byl odeslán email s odkazem na pokračování v registraci.",FlashStyle.Success)
            emailForm.submit.label.text = "Odeslat ověřovací email znovu"
            return render_template("registrace_email2.html", form=emailForm)
    return render_template("registrace_email.html", form=emailForm)
Beispiel #6
0
def handle_exception(e):
    text = ''
    dbUser = DBUser.LoadFromSession('dbUser')
    if (dbUser != None):
        text += f'Uzivatel:<br>{dbUser.__dict__}<br>'
    else:
        dbUserReg = DBUser.LoadFromSession('dbUserRegistration')
        if (dbUserReg != None):
            text += f'Uzivatel registrace:<br>{dbUserReg.__dict__}<br>'

    etype, value, tb = sys.exc_info()
    exceptionString = '<br>'.join(traceback.format_exception(etype, value, tb))
    text += f'Error message:<br> {exceptionString}'
    SendMail(GetEmail('noreplyMail'), GetEmail('errorMail'),
             'Internal error on app.seniore.org', text)
    return render_template('error_500.html')
Beispiel #7
0
def requests_detail_user():
    rid = request.args.get("id", type=int)
    dbUser = DBUser.LoadFromSession('dbUser')
    userId = dbUser.id

    requests = DBAccess.ExecuteSQL(
        """select s.category, 
            
            case when 	ud.id = %s
            then	uo.first_name 
            else	ud.first_name
            end,
            
            case when 	ud.id = %s
            then	uo.surname 
            else	ud.surname
            end,
			
		      	case when 	ud.id = %s
            then	uo.email 
            else	ud.email
            end,
          
          r.date_time,
          r.id,
          ud.id,
          uo.id,
          r.id_users_creator
        from requests r
        inner join services s on r.id_services = s.id
        inner join users ud on r.id_users_demand = ud.id
        inner join users uo on r.id_users_offer = uo.id
        inner join requests_status rs on r.id_requests_status = rs.id
        where r.id =%s""", (userId, userId, userId, rid))

    if (requests is None):
        abort(403)
    requests = requests[0]
    dbUser = DBUser.LoadFromSession('dbUser')
    if dbUser.level < 2 and dbUser.id != int(requests[6]) and dbUser.id != int(
            requests[7]):
        abort(403)

    acceptButtonVisible = (int(requests[8]) != userId)

    if request.method == "POST":
        # status = request.form["submit_button"]
        status = RequestStatusUser[request.form["submit_button"]]
        DBAccess.ExecuteUpdate(
            "UPDATE requests SET id_requests_status= %s where id= %s",
            (status, rid))
        text = 'potvrzena' if status == '2' else 'zamítnuta'
        SendMail(
            GetEmail('noreplyMail'), requests[3],
            'Seniore.org - změna stavu vaší žádosti',
            f'Vaše žádost / nabídka na činnost {requests[0]} dne {requests[4]} byla {text}.'
        )
        return redirect(url_for("profile_bp.user_request_overview"))

    return render_template("request_detail_user.html",
                           entries=requests,
                           acceptButtonVisible=acceptButtonVisible)
Beispiel #8
0
def email_sent():

    # kdo oslovuje
    user = session["user"]
    id_users_services = request.form.get("id", type=int)
    dbUser = DBUser.LoadFromSession('dbUser')
    email_oslovujici = dbUser.email
    name_oslovujici = dbUser.first_name
    surname_oslovujici = dbUser.surname
    # date = request.form.get("date", type=str)
    # time = request.form.get("time", type=str)
    # strDateTime = f"{date} {time}"
    # dt = datetime.strptime(strDateTime, "%Y-%m-%d %H:%M")

    info = request.form.get("info", type=str)

    email_user_long = DBAccess.ExecuteSQL(
        """
    SELECT u.email, u.id, s.id, d.id
    FROM users u
    LEFT JOIN users_services us on us.id_users = u.id
    LEFT JOIN services s on s.id = us.id_services
    LEFT JOIN demand_offer d on d.id = us.id_demand_offer
    WHERE us.id = %s
    """, (id_users_services, ))

    email_user = email_user_long[0][0]  # for testing emails are sent to admin
    services_id = email_user_long[0][2]
    id_demand_offer = email_user_long[0][3]

    offeringUserId = email_user_long[0][
        1] if id_demand_offer == 2 else session["id_user"]
    demandingUserId = email_user_long[0][
        1] if id_demand_offer == 1 else session["id_user"]

    id_request = DBAccess.GetSequencerNextVal("requests_id_seq")
    DBAccess.ExecuteInsert(
        "INSERT INTO requests (id, id_users_demand, id_users_offer, id_services, "
        "timestamp, date_time, add_information, id_requests_status, id_users_creator)"
        " values (%s, %s,%s,%s,now(),now(),%s,%s, %s)",
        (id_request, demandingUserId, offeringUserId, services_id, info, 1,
         session["id_user"]))

    # protistrana, kdo je osloven - email_user
    dbUser_protistrana = DBAccess.GetDBUserByEmail(email_user)
    name_protistrana = dbUser_protistrana.first_name
    surname_protistrana = dbUser_protistrana.surname

    text1 = 'Vaši nabídku' if id_demand_offer == 1 else 'Váš požadavek'

    text2 = 'Vaši nabídky' if id_demand_offer == 1 else 'vašeho požadavku'

    # mail to person who click on "contact"
    SendMail(
        GetEmail('noreplyMail'), f'{email_oslovujici}',
        'Zaregistrována žádost o spolupráci',
        f'''<html>Úspěšně jsme zaregistrovali Vaší žádost o spolupráci. <br> 
    Váš kontakt je {name_protistrana},  email: {email_user} <br>
    Prosíme, spojte se, abyste se mohli domluvit na podrobnostech. Nezapomeňte dodržovat pravidla: <a href="https://app.seniore.org/podminky_dobrovolnici"> dobrovolníci</a> / <a href="https://app.seniore.org/podminky_seniori"> senioři</a><br>
    V případě potíží, nebo nejasností nám neváhejte napsat na [email protected]. <br>
    Děkujeme, Váš tým Seniore</html>''')
    # mail to person who is being contacted
    SendMail(
        GetEmail('noreplyMail'), f'{email_user}',
        'Zaregistrována žádost o spolupráci', f'''
    <html> Pan / paní {name_oslovujici} by se s Vámi rád/a spojil/a ohledně možné pomoci. 
    Kontaktní email je: {email_oslovujici} <br> 
    Prosíme, spojte se, abyste se mohli domluvit na podrobnostech. Nezapomeňte dodržovat pravidla: <a href="https://app.seniore.org/podminky_dobrovolnici"> dobrovolníci</a> / <a href="https://app.seniore.org/podminky_seniori"> senioři</a><br>
    V případě potíží, nebo nejasností nám neváhejte napsat na [email protected]. <br>
    Děkujeme, Váš tým Seniore < / html > ''')
    # mail to admins
    SendMail(
        GetEmail('noreplyMail'), GetEmail('adminMail'),
        'Seniore - zažádáno o spolupráci',
        f'''Uživatel {user} se s chce setkat s {email_user}! :-D <br>
    Doplňující informace: {info}. <br>
    Prosím, zkontrolujte žádost v http://seniore.herokuapp.com/requests_detail?id={id_request}.'''
    )
    # print(response.status_code)
    # print(response.body)
    # print(response.headers)
    return render_template("email_sent.html", text1=text1, text2=text2)
Beispiel #9
0
def profil_editace():

    regForm = ProfilUpdateForm()
    dbUser = DBUser.LoadFromSession('dbUser')
    if (regForm.validate_on_submit()):
        dbUser.first_name = regForm.first_name.data
        dbUser.surname = regForm.surname.data
        dbUser.telephone = regForm.telephone.data
        dbUser.street = regForm.street.data
        # dbUser.street_number = regForm.street_number.data
        dbUser.post_code = regForm.post_code.data
        dbUser.town = regForm.town.data
        dbUser.info = regForm.info.data

        address = "{} {} {}".format(dbUser.street, dbUser.town,
                                    dbUser.post_code)
        coordinates = GetCoordinates(address)
        if (coordinates is not None):
            dbUser.latitude = coordinates[0]
            dbUser.longitude = coordinates[1]
        else:
            flash('Nenalezeny souřadnice pro vaši adresu', FlashStyle.Danger)
            return render_template("profil_editace.html", form=regForm)

        dbUser.UpdateDB()
        dbUser.SaveToSession('dbUser')

        if (regForm.soubor.data is not None
                and regForm.soubor.data.filename != ''):
            file_name = secure_filename(regForm.soubor.data.filename)
            path = os.path.join(app.config["UPLOAD_FOLDER"], file_name)
            regForm.soubor.data.save(path)
            json = UploadImage(path, str(dbUser.id) + 'new')
            version = json['version']

            newImageUrl = GetImageUrl(str(dbUser.id) + 'new', version=version)
            RenameImage(str(dbUser.id) + 'new', str(dbUser.id))
            DeleteImage(str(dbUser.id) + 'new')

            SendMail(
                GetEmail('noreplyMail'), dbUser.email,
                "Seniore.org - schválení profilové fotografie",
                "Vaše nové profilové foto na app.seniore.org bude nahráno na váš profil. Může to chvilku zabrat, mějte, prosím, strpení."
            )

            # ts = URLSafeTimedSerializer(app.config["SECRET_KEY"])
            # token = ts.dumps(dbUser.email, salt='change-photo-key')
            # confirm_url = url_for(
            #     'profile_bp.change_photo_confirm',
            #     token=token,
            #     _external=True)

            # denied_url = url_for(
            #     'profile_bp.change_photo_denied',
            #     token=token,
            #     _external=True)
            # noCacheSufix = '?nocache=<?php echo time(); ?'

            # email_text = f'''Uživatel { dbUser.first_name } {dbUser.surname} {dbUser.email} si změnil profilovou fotografii.  <br>\
            #      <img src={GetImageUrl(dbUser.id)+noCacheSufix}>původní foto</img> <br>\
            #      <img src={newImageUrl+noCacheSufix}>nové foto</img> <br>\
            #     Link pro schválení fotografie {confirm_url} <br>\
            #     Link pro odmítnutí fotografie {denied_url}'''

            # SendMail("*****@*****.**",to_emails,'Seniore.cz - schválení profilové fotografie',email_text)
            # flash("Nová profilová fotografie byla odeslána administrátorovi ke schválení, o výsledku budete informováni emailem.",FlashStyle.Success)
        return redirect(url_for('profile_bp.profil'))

    regForm.first_name.data = dbUser.first_name
    regForm.surname.data = dbUser.surname
    regForm.telephone.data = dbUser.telephone
    regForm.street.data = dbUser.street
    # regForm.street_number.data = dbUser.street_number
    regForm.post_code.data = dbUser.post_code
    regForm.town.data = dbUser.town
    regForm.info.data = dbUser.info
    return render_template("profil_editace.html", form=regForm)