1 |
35459
|
argiro.kok
|
<?php
|
2 |
|
|
|
3 |
|
|
defined('_JEXEC') or die('Access denied');
|
4 |
|
|
|
5 |
|
|
jimport('joomla.application.component.helper');
|
6 |
|
|
jimport('joomla.application.component.model');
|
7 |
|
|
jimport('joomla.log.log');
|
8 |
|
|
|
9 |
|
|
// This model creates redirection URLs.
|
10 |
|
|
class OpenAireModelRedirect extends JModelItem {
|
11 |
|
|
const LOG = 'openaire';
|
12 |
|
|
|
13 |
|
|
private $invenioUrl;
|
14 |
|
|
private $invenioPassword;
|
15 |
|
|
private $validatorUrl;
|
16 |
|
|
private $validatorPassword;
|
17 |
|
|
|
18 |
|
|
// Construct a new OpenAireModelInvenio.
|
19 |
|
|
// $configuration the configuration to use
|
20 |
|
|
public function __construct($configuration) {
|
21 |
|
|
parent::__construct($configuration);
|
22 |
|
|
$parameters = JComponentHelper :: getParams('com_openaire');
|
23 |
|
|
$this -> invenioUrl = $parameters -> get('invenioUrl');
|
24 |
|
|
$this -> invenioPassword = $parameters -> get('invenioPassword');
|
25 |
|
|
$this -> validatorUrl = $parameters -> get('validatorUrl');
|
26 |
|
|
$this -> validatorPassword = $parameters -> get('validatorPassword');
|
27 |
|
|
}
|
28 |
|
|
|
29 |
|
|
// Create an Invenio redirect URL. Since an Invenio redirect URL involves a timeout, it can not be cached.
|
30 |
|
|
// $user the user to create Invenio redirect URL for
|
31 |
|
|
// return the Invenio redirect URL or NULL if any errors occur
|
32 |
|
|
public function createInvenioRedirectUrl($user) {
|
33 |
|
|
try {
|
34 |
|
|
$userData = array(
|
35 |
|
|
'email' => $user -> email,
|
36 |
|
|
'fullname' => $user -> name,
|
37 |
|
|
'nickname' => $user -> username,
|
38 |
|
|
'id' => $user -> id,
|
39 |
|
|
'__timeout__' => time() + 60 * 60,
|
40 |
|
|
'__userip__' => $this -> getUserIp()
|
41 |
|
|
);
|
42 |
|
|
$assertion = json_encode($userData);
|
43 |
|
|
$digest = hash_hmac('sha1', $assertion, $this -> invenioPassword);
|
44 |
|
|
$redirectUrl = $this -> invenioUrl . 'youraccount/robotlogin?robot=OpenAIRE_Portal&login_method=OpenAIRE&assertion=' . urlencode($assertion) . '&digest=' . urlencode($digest) . '&referer=' . urlencode($this -> invenioUrl . 'deposit?style=portal&ln=en');
|
45 |
|
|
JLog :: add('Created Invenio redirect URL ' . $redirectUrl . ' (user: ' . $user -> username . ')', JLog :: INFO, self :: LOG);
|
46 |
|
|
return $redirectUrl;
|
47 |
|
|
} catch (Exception $e) {
|
48 |
|
|
JLog :: add('Error creating Invenio redirect URL (user: ' . $user -> username . '): ' . $e -> getMessage(), JLog :: ERROR, self :: LOG);
|
49 |
|
|
return NULL;
|
50 |
|
|
}
|
51 |
|
|
}
|
52 |
|
|
|
53 |
|
|
// Create a validator redirect URL. Since a validator redirect URL involves a timeout, it can not be cached.
|
54 |
|
|
// $user the user to create validator redirect URL for
|
55 |
|
|
// return the validator redirect URL or NULL if any errors occur
|
56 |
|
|
public function createValidatorRedirectUrl($user) {
|
57 |
|
|
try {
|
58 |
|
|
$redirectUrl = $this -> validatorUrl;
|
59 |
|
|
if (!$user -> guest) {
|
60 |
|
|
$username = $user -> username;
|
61 |
|
|
$ip = $this -> getUserIp();
|
62 |
|
|
$valid = (time() + 60 * 60) * 1000;
|
63 |
|
|
$signature = hash_hmac('sha1', $username . $ip . $valid, $this -> validatorPassword);
|
64 |
|
|
$redirectUrl .= 'portalLogin.action?user=' . urlencode($username) . '&valid=' . urlencode($valid) . '&ip=' . urlencode($ip) . '&signature=' . base64_encode($signature);
|
65 |
|
|
}
|
66 |
|
|
JLog :: add('Created validator redirect URL ' . $redirectUrl . ' (user: ' . ($user -> guest ? 'guest' : $user -> username) . ')', JLog :: INFO, self :: LOG);
|
67 |
|
|
return $redirectUrl;
|
68 |
|
|
} catch (Exception $e) {
|
69 |
|
|
JLog :: add('Error creating validator redirect URL (user: ' . $user -> username . ', referer: ' . $referer . '): ' . $e -> getMessage(), JLog :: ERROR, self :: LOG);
|
70 |
|
|
return NULL;
|
71 |
|
|
}
|
72 |
|
|
}
|
73 |
|
|
|
74 |
|
|
private function getUserIp() {
|
75 |
|
|
$ip = NULL;
|
76 |
|
|
if (function_exists('apache_request_headers')) {
|
77 |
|
|
$headers = apache_request_headers();
|
78 |
|
|
if (array_key_exists('X-Forwarded-For', $headers))
|
79 |
|
|
$ip = $headers['X-Forwarded-For'];
|
80 |
|
|
}
|
81 |
|
|
if ($ip === NULL)
|
82 |
|
|
$ip = $_SERVER['REMOTE_ADDR'];
|
83 |
|
|
return $ip;
|
84 |
|
|
}
|
85 |
|
|
}
|