aboutsummaryrefslogtreecommitdiff
path: root/public/activate_email.php
blob: 25e70f31b4a9939e55d20f18ada85fb41cae052f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
# Lifter007: TODO
# Lifter003: TODO
# Lifter010: TODO

$_GET['cancel_login'] = '1';

require '../lib/bootstrap.php';

use Studip\Button, Studip\LinkButton;

ob_start();

page_open(['sess' => 'Seminar_Session', 'auth' => 'Seminar_Default_Auth', 'perm' => 'Seminar_Perm', 'user' => 'Seminar_User']);

function head($headline, $red=False) {
    echo sprintf('<h1>%s</h1>', $headline);
}

function footer() {
}

function reenter_mail() {
    echo '<br>';
    echo '<form action="' . URLHelper::getLink() . '" method="post" class="default">';
    echo '<fieldset>';
    echo '<legend>'._('Sollten Sie keine E-Mail erhalten haben, können Sie sich einen neuen Aktivierungsschlüssel zuschicken lassen. Geben Sie dazu Ihre gewünschte E-Mail-Adresse unten an') . '</legend>'
        . CSRFProtection::tokenTag()
        .'<input type="hidden" name="uid" value="'. htmlReady(Request::option('uid')) .'">'
        .'<label>' . _('E-Mail')
        .'<input type="email" name="email1" required>'
        .'</label>'
        .'<label>' . _('Wiederholung')
        .'<input type="email" name="email2" required>'
        .'</label>';
    echo '</fieldset>';
    echo '<footer>' . Button::createAccept() . '</footer>';
    echo '</form>';
}

function mail_explain() {
    echo '<form action="' . URLHelper::getLink() . '" method="post" class="default">';
    echo '<fieldset>';
    echo '<legend>' .  _('Sie haben Ihre E-Mail-Adresse geändert.
    Um diese frei zu schalten müssen Sie den Ihnen an Ihre neue Adresse zugeschickten Aktivierungs Schlüssel im unten stehenden Eingabefeld eintragen.') . '</legend>';
    echo CSRFProtection::tokenTag();
    echo '<label>' . _('Aktivierungs Schlüssel')
        .'<input type="text" name="key"><input name="uid" type="hidden" value="'.htmlReady(Request::option('uid')).'">';
    echo '</fieldset>';
    echo '<footer>' . Button::createAccept() . '</footer>';
    echo '</form>';

}

if(!Request::option('uid'))
    header("Location: index.php");

URLHelper::addLinkParam('cancel_login', 1);

// set up user session
include 'lib/seminar_open.php';

// display header
PageLayout::setTitle(_('E-Mail Aktivierung'));

$uid = Request::option('uid');
if(Request::get('key') !== null) {

    $db = DBManager::get();
    $sth = $db->prepare("SELECT validation_key FROM auth_user_md5 WHERE user_id=?");
    $sth->execute([$uid]);
    $result = $sth->fetch();
    $key = $result['validation_key'];

    if(Request::get('key') == $key) {
        $sth = $db->prepare("UPDATE auth_user_md5 SET validation_key='' WHERE user_id=?");
        $sth->execute([$uid]);
        unset($_SESSION['semi_logged_in']);
        head(PageLayout::getTitle());
        PageLayout::postSuccess(_('Ihre E-Mail-Adresse wurde erfolgreich geändert.'));
        printf(' <a href="' . URLHelper::getLink('index.php') . '">%s</a>', _('Zum Login'));
    } else if ($key == '') {
        head(PageLayout::getTitle());
        PageLayout::postInfo(_('Ihre E-Mail-Adresse ist bereits geändert.'));
        printf(' <a href="' . URLHelper::getLink('index.php') . '">%s</a>', _('Zum Login'));
    } else {
        if (Request::get('key')) {
            PageLayout::postError(_("Falscher Bestätigungscode."));
        }
        head(PageLayout::getTitle());
        mail_explain();
        if($_SESSION['semi_logged_in'] == Request::option('uid')) {
            reenter_mail();
        } else {
            printf(_('Sie können sich %seinloggen%s und sich den Bestätigungscode neu oder an eine andere E-Mail-Adresse schicken lassen.'),
                    '<a href="' . URLHelper::getLink('index.php?again=yes') . '">', '</a>');
        }
    }

// checking semi_logged_in is important to avoid abuse
} else if(Request::get('email1') && Request::get('email2') && $_SESSION['semi_logged_in'] == Request::option('uid')) {
    if(Request::get('email1') == Request::get('email2')) {
        // change mail
        $tmp_user = User::find(Request::option('uid'));
        if($tmp_user && $tmp_user->changeEmail(Request::get('email1'), true)) {
            $_SESSION['semi_logged_in'] = False;
        }

    } else {
        PageLayout::postError(_('Die eingegebenen E-Mail-Adressen stimmen nicht überein. Bitte überprüfen Sie Ihre Eingabe.'));
    }
    mail_explain();
    reenter_mail();
} else {
    // this never happens unless someone manipulates urls (or the presented link within the mail is broken)
    head(PageLayout::getTitle());
    mail_explain();
    reenter_mail();
}

$template = $GLOBALS['template_factory']->open('layouts/base.php');
$template->content_for_layout = ob_get_clean();
echo $template->render();
page_close();