Attention ! Gitlab fournissant maintenant nativement des certificats Let’s Encrypt aux domaines personnalisés des Gitlab Pages, nous avons coupé notre service qui le faisait automatiquement pour vous.

Il est impératif, pour que votre domaine personnalisé continue à avoir un certificat Let’s Encrypt à jour, d’activer la fonctionnalité native dans les paramètres de votre projet. Cette activation remplacera votre certificat actuel par un nouveau certificat Let’s Encrypt géré par Gitlab.

Voir les détails sur https://docs.framasoft.org/fr/gitlab/gitlab-pages-le.html

Mod_Openid.php 5.63 KB
Newer Older
redmatrix's avatar
redmatrix committed
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
<?php
namespace Zotlabs\Module;


require_once('library/openid/openid.php');
require_once('include/auth.php');


class Openid extends \Zotlabs\Web\Controller {

	function get() {
	
		$noid = get_config('system','disable_openid');
		if($noid)
			goaway(z_root());
	
		logger('mod_openid ' . print_r($_REQUEST,true), LOGGER_DATA);
	
		if(x($_REQUEST,'openid_mode')) {
	
			$openid = new LightOpenID(z_root());
	
			if($openid->validate()) {
	
				logger('openid: validate');
	
				$authid = normalise_openid($_REQUEST['openid_identity']);
	
				if(! strlen($authid)) {
					logger( t('OpenID protocol error. No ID returned.') . EOL);
					goaway(z_root());
				}
				
				$x = match_openid($authid);
				if($x) {	
	
					$r = q("select * from channel where channel_id = %d limit 1",
						intval($x)
					);
					if($r) {
						$y = q("select * from account where account_id = %d limit 1",
							intval($r[0]['channel_account_id'])
						);
						if($y) {
						    foreach($y as $record) {
						        if(($record['account_flags'] == ACCOUNT_OK) || ($record['account_flags'] == ACCOUNT_UNVERIFIED)) {
				            		logger('mod_openid: openid success for ' . $x[0]['channel_name']);
									$_SESSION['uid'] = $r[0]['channel_id'];
									$_SESSION['account_id'] = $r[0]['channel_account_id'];
									$_SESSION['authenticated'] = true;
									authenticate_success($record,$r[0],true,true,true,true);
									goaway(z_root());
								}
							}
						}
					}
				}
	
				// Successful OpenID login - but we can't match it to an existing account.
				// See if they've got an xchan
	
				$r = q("select * from xconfig left join xchan on xchan_hash = xconfig.xchan where cat = 'system' and k = 'openid' and v = '%s' limit 1",
					dbesc($authid)
				);				
	
				if($r) {
					$_SESSION['authenticated'] = 1;
					$_SESSION['visitor_id'] = $r[0]['xchan_hash'];
					$_SESSION['my_url'] = $r[0]['xchan_url'];
					$_SESSION['my_address'] = $r[0]['xchan_addr'];
					$arr = array('xchan' => $r[0], 'session' => $_SESSION);
					call_hooks('magic_auth_openid_success',$arr);
					\App::set_observer($r[0]);
					require_once('include/security.php');
					\App::set_groups(init_groups_visitor($_SESSION['visitor_id']));
					info(sprintf( t('Welcome %s. Remote authentication successful.'),$r[0]['xchan_name']));
					logger('mod_openid: remote auth success from ' . $r[0]['xchan_addr']); 
					if($_SESSION['return_url'])
						goaway($_SESSION['return_url']);
					goaway(z_root());
				}
	
				// no xchan...
				// create one.
				// We should probably probe the openid url and figure out if they have any kind of
				// social presence we might be able to scrape some identifying info from. 
	
				$name = $authid;
				$url = trim($_REQUEST['openid_identity'],'/');
				if(strpos($url,'http') === false)
					$url = 'https://' . $url;
				$pphoto = z_root() . '/' . get_default_profile_photo();
				$parsed = @parse_url($url);
				if($parsed) {
					$host = $parsed['host'];
				}
	
				$attr = $openid->getAttributes();
	
				if(is_array($attr) && count($attr)) {
					foreach($attr as $k => $v) {
						if($k === 'namePerson/friendly')
							$nick = notags(trim($v));
						if($k === 'namePerson/first')
							$first = notags(trim($v));
						if($k === 'namePerson')
							$name = notags(trim($v));
						if($k === 'contact/email')
							$addr = notags(trim($v));
						if($k === 'media/image/aspect11')
							$photosq = trim($v);
						if($k === 'media/image/default')
							$photo_other = trim($v);
					}
				}
				if(! $nick) {
					if($first)
						$nick = $first;
					else
						$nick = $name;
				}
	
				require_once('library/urlify/URLify.php');
				$x = strtolower(\URLify::transliterate($nick));
				if($nick & $host)
					$addr = $nick . '@' . $host;
				$network = 'unknown';
				
				if($photosq)
					$pphoto = $photosq;
				elseif($photo_other)
					$pphoto = $photo_other;
	
				$mimetype = guess_image_type($pphoto);
	
Zot's avatar
Zot committed
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
		        $x = xchan_store_lowlevel(
					[
						'xchan_hash'           => $url,
						'xchan_photo_mimetype' => $mimetype,
						'xchan_photo_l'        => $pphoto,
						'xchan_addr'           => $addr,
						'xchan_url'            => $url,
						'xchan_name'           => $name,
						'xchan_network'        => $network,
						'xchan_photo_date'     => datetime_convert(),
						'xchan_name_date'      => datetime_convert(),
						'xchan_hidden'         => 1
					]
				);

redmatrix's avatar
redmatrix committed
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
				if($x) {
					$r = q("select * from xchan where xchan_hash = '%s' limit 1",
						dbesc($url)
					);
					if($r) {
	
						$photos = import_xchan_photo($pphoto,$url);
						if($photos) {
							$z = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', 
								xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_hash = '%s'",
								dbesc(datetime_convert()),
								dbesc($photos[0]),
								dbesc($photos[1]),
								dbesc($photos[2]),
								dbesc($photos[3]),
								dbesc($url)
		            		);
						}
	
						set_xconfig($url,'system','openid',$authid);
						$_SESSION['authenticated'] = 1;
						$_SESSION['visitor_id'] = $r[0]['xchan_hash'];
						$_SESSION['my_url'] = $r[0]['xchan_url'];
						$_SESSION['my_address'] = $r[0]['xchan_addr'];
						$arr = array('xchan' => $r[0], 'session' => $_SESSION);
						call_hooks('magic_auth_openid_success',$arr);
						\App::set_observer($r[0]);
						info(sprintf( t('Welcome %s. Remote authentication successful.'),$r[0]['xchan_name']));
						logger('mod_openid: remote auth success from ' . $r[0]['xchan_addr']); 
						if($_SESSION['return_url'])
							goaway($_SESSION['return_url']);
						goaway(z_root());
					}
				}
	
			}
		}
		notice( t('Login failed.') . EOL);
		goaway(z_root());
		// NOTREACHED
	}
	
}