-
Notifications
You must be signed in to change notification settings - Fork 1
/
trezor_connect.register.inc
144 lines (107 loc) · 3.44 KB
/
trezor_connect.register.inc
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<?php
/**
* @file
* Provides registration form functionality.
*/
/**
* Provides the page callback used to process a TREZOR connect registration
* response.
*/
function trezor_connect_page_callback_register($type = 'nojs') {
$output = NULL;
$response = $_POST['response'];
$challenge = $_POST['challenge'];
$result = trezor_connect_response_valid($response, $challenge);
if (!$result) {
if ($type == 'nojs') {
drupal_access_denied();
}
else {
$commands = array();
$selector = '';
if (isset($_POST['selector'])) {
$selector = $_POST['selector'];
$selector = check_plain($selector);
//$selector = '#' . $selector;
}
$arguments = array();
$arguments['redirect'] = FALSE;
$arguments['error'] = TRUE;
$message = t('An error has occurred validating your TREZOR credentials.');
$variables = array(
'type' => 'error',
'message' => $message,
);
$message = theme('trezor_connect_message', $variables);
$arguments['message'] = $message;
// IMPORTANT: misc/ajax.js line 605 $element[response.method].apply($element, response.arguments);
// requires a very specific format otherwise the $arguments will be passed as undefined
$arguments = array(
'callback',
$arguments,
);
$commands[] = ajax_command_invoke($selector, 'trezor_connect', $arguments);
$output = array(
'#type' => 'ajax',
'#commands' => $commands,
);
$output = ajax_deliver($output);
}
}
else {
$result = trezor_connect_mapping($response);
if (is_array($result) && isset($result['uid'])) {
$text = t('please click here to login');
$path = 'user/login';
$link = l($text, $path);
$args = array(
'!link' => $link,
);
$message = t('There is already an account associated with the TREZOR, !link', $args);
if ($type != 'ajax') {
drupal_set_message($message, 'warning');
}
}
else {
$_SESSION['trezor_connect_response'] = $response;
$_SESSION['trezor_connect_challenge'] = $challenge;
$message = t('Your TREZOR device authentication has been saved to your session, please complete the registration process to associate your TREZOR device with your account.');
if ($type != 'ajax') {
drupal_set_message($message);
}
}
if ($type != 'ajax') {
$path = 'user/register';
drupal_goto($path);
}
else {
$commands = array();
$selector = '';
if (isset($_POST['selector'])) {
$selector = $_POST['selector'];
$selector = check_plain($selector);
//$selector = '#' . $selector;
}
$arguments = array();
$arguments['redirect'] = FALSE;
$variables = array(
'message' => $message,
);
$message = theme('trezor_connect_message', $variables);
$arguments['message'] = $message;
// IMPORTANT: misc/ajax.js line 605 $element[response.method].apply($element, response.arguments);
// requires a very specific format otherwise the $arguments will be passed as undefined
$arguments = array(
'callback',
$arguments,
);
$commands[] = ajax_command_invoke($selector, 'trezor_connect', $arguments);
$output = array(
'#type' => 'ajax',
'#commands' => $commands,
);
$output = ajax_deliver($output);
}
}
return $output;
}