source: extensions/oAuth/include/functions.inc.php @ 26605

Revision 26605, 2.9 KB checked in by mistic100, 6 years ago (diff)

add Persona authentification

Line 
1<?php
2defined('OAUTH_PATH') or die('Hacking attempt!');
3
4function load_hybridauth_conf()
5{
6  global $hybridauth_conf, $conf;
7 
8  if (file_exists(PHPWG_ROOT_PATH.OAUTH_CONFIG))
9  {
10    $hybridauth_conf = include(PHPWG_ROOT_PATH.OAUTH_CONFIG);
11    $hybridauth_conf['base_url'] = OAUTH_PUBLIC;
12    if (!empty($conf['oauth_debug_file']))
13    {
14      $hybridauth_conf['debug_mode'] = true;
15      $hybridauth_conf['debug_file'] = $conf['oauth_debug_file'];
16    }
17    return true;
18  }
19  else
20  {
21    return false;
22  }
23}
24
25function oauth_assign_template_vars($u_redirect=null)
26{
27  global $template, $conf, $hybridauth_conf, $user;
28 
29  $conf['oauth']['include_common_template'] = true;
30 
31  if ($template->get_template_vars('OAUTH') == null)
32  {
33    if (!empty($user['oauth_id']))
34    {
35      list($provider, $identifier) = explode('---', $user['oauth_id'], 2);
36      if ($provider == 'Persona')
37      {
38        $persona_email = $identifier;
39      }
40    }
41   
42    $template->assign('OAUTH', array(
43      'conf' => $conf['oauth'],
44      'u_login' => get_root_url() . OAUTH_PATH . 'auth.php?provider=',
45      'providers' => $hybridauth_conf['providers'],
46      'persona_email' => @$persona_email,
47      ));
48    $template->assign(array(
49      'OAUTH_PATH' => OAUTH_PATH,
50      'OAUTH_ABS_PATH' => realpath(OAUTH_PATH) . '/',
51      'ABS_ROOT_URL' => rtrim(get_gallery_home_url(), '/') . '/',
52      ));
53  }
54 
55  if (isset($u_redirect))
56  {
57    $template->append('OAUTH', compact('u_redirect'), true);
58  }
59}
60
61function get_oauth_id($user_id)
62{
63  global $conf;
64 
65  $query = '
66SELECT oauth_id FROM ' . USERS_TABLE . '
67  WHERE ' . $conf['user_fields']['id'] . ' = ' . $user_id . '
68  AND oauth_id != ""
69;';
70  $result = pwg_query($query);
71 
72  if (!pwg_db_num_rows($result))
73  {
74    return null;
75  }
76  else
77  {
78    list($oauth_id) = pwg_db_fetch_row($result);
79    return $oauth_id;
80  }
81}
82
83// http://www.sitepoint.com/authenticate-users-with-mozilla-persona/
84function persona_verify()
85{
86  $url = 'https://verifier.login.persona.org/verify';
87
88  $assert = filter_input(
89    INPUT_POST,
90    'assertion',
91    FILTER_UNSAFE_RAW,
92    FILTER_FLAG_STRIP_LOW|FILTER_FLAG_STRIP_HIGH
93    );
94
95  $scheme = 'http';
96  if ( (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443 )
97  {
98    $scheme = 'https';
99  }
100  $audience = sprintf(
101    '%s://%s:%s',
102    $scheme,
103    $_SERVER['HTTP_HOST'],
104    $_SERVER['SERVER_PORT']
105    );
106
107  $params = 'assertion=' . urlencode($assert) . '&audience=' . urlencode($audience);
108
109  $options = array(
110    CURLOPT_URL => $url,
111    CURLOPT_RETURNTRANSFER => true,
112    CURLOPT_POST => true,
113    CURLOPT_POSTFIELDS => $params,
114    CURLOPT_SSL_VERIFYPEER => true,
115    CURLOPT_SSL_VERIFYHOST => 2,
116    );
117
118  $ch = curl_init();
119  curl_setopt_array($ch, $options);
120  $result = curl_exec($ch);
121  curl_close($ch);
122 
123  if ($result === false)
124  {
125    return false;
126  }
127  else
128  {
129    return json_decode($result, true);
130  }
131}
Note: See TracBrowser for help on using the repository browser.