137748cd8SNickeau<?php 237748cd8SNickeau/** 337748cd8SNickeau * Copyright (c) 2021. ComboStrap, Inc. and its affiliates. All Rights Reserved. 437748cd8SNickeau * 537748cd8SNickeau * This source code is licensed under the GPL license found in the 637748cd8SNickeau * COPYING file in the root directory of this source tree. 737748cd8SNickeau * 837748cd8SNickeau * @license GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html) 937748cd8SNickeau * @author ComboStrap <support@combostrap.com> 1037748cd8SNickeau * 1137748cd8SNickeau */ 1237748cd8SNickeau 1337748cd8SNickeaunamespace ComboStrap; 1437748cd8SNickeau 1537748cd8SNickeau 1637748cd8SNickeauuse Doku_Form; 1737748cd8SNickeauuse TestRequest; 1837748cd8SNickeau 1937748cd8SNickeauclass Identity 2037748cd8SNickeau{ 2137748cd8SNickeau 2237748cd8SNickeau const CANONICAL = "identity"; 2337748cd8SNickeau const CONF_ENABLE_LOGO_ON_IDENTITY_FORMS = "enableLogoOnIdentityForms"; 2437748cd8SNickeau const JS_NAVIGATION_ANONYMOUS_VALUE = "anonymous"; 2537748cd8SNickeau const JS_NAVIGATION_SIGNED_VALUE = "signed"; 2637748cd8SNickeau /** 2737748cd8SNickeau * A javascript indicator 2837748cd8SNickeau * to know if the user is logged in or not 2937748cd8SNickeau * (ie public or not) 3037748cd8SNickeau */ 3137748cd8SNickeau const JS_NAVIGATION_INDICATOR = "navigation"; 3237748cd8SNickeau 3337748cd8SNickeau /** 3437748cd8SNickeau * Is logged in 3537748cd8SNickeau * @return boolean 3637748cd8SNickeau */ 3737748cd8SNickeau public static function isLoggedIn() 3837748cd8SNickeau { 3937748cd8SNickeau $loggedIn = false; 4037748cd8SNickeau global $INPUT; 4137748cd8SNickeau if ($INPUT->server->has('REMOTE_USER')) { 4237748cd8SNickeau $loggedIn = true; 4337748cd8SNickeau } 4437748cd8SNickeau return $loggedIn; 4537748cd8SNickeau } 4637748cd8SNickeau 4737748cd8SNickeau /** 4837748cd8SNickeau * @param TestRequest $request 4937748cd8SNickeau * @param string $user 5037748cd8SNickeau */ 5137748cd8SNickeau public static function becomeSuperUser(&$request = null, $user = 'admin') 5237748cd8SNickeau { 5337748cd8SNickeau global $conf; 5437748cd8SNickeau $conf['useacl'] = 1; 5537748cd8SNickeau $conf['superuser'] = $user; 5637748cd8SNickeau $conf['remoteuser'] = $user; 5737748cd8SNickeau 5837748cd8SNickeau if ($request != null) { 5937748cd8SNickeau $request->setServer('REMOTE_USER', $user); 6037748cd8SNickeau } else { 6137748cd8SNickeau global $INPUT; 6237748cd8SNickeau $INPUT->server->set('REMOTE_USER', $user); 631fa8c418SNickeau // same as $_SERVER['REMOTE_USER'] = $user; 6437748cd8SNickeau } 6537748cd8SNickeau 6637748cd8SNickeau // $_SERVER[] = $user; 6737748cd8SNickeau // global $USERINFO; 6837748cd8SNickeau // $USERINFO['grps'] = array('admin', 'user'); 6937748cd8SNickeau 7037748cd8SNickeau // global $INFO; 7137748cd8SNickeau // $INFO['ismanager'] = true; 7237748cd8SNickeau 7337748cd8SNickeau } 7437748cd8SNickeau 7537748cd8SNickeau /** 7637748cd8SNickeau * @param $request 7737748cd8SNickeau * @param string $user - the user to login 7837748cd8SNickeau */ 7937748cd8SNickeau public static function logIn(&$request, $user = 'defaultUser') 8037748cd8SNickeau { 8137748cd8SNickeau 8237748cd8SNickeau $request->setServer('REMOTE_USER', $user); 8337748cd8SNickeau 8437748cd8SNickeau /** 8537748cd8SNickeau * The {@link getSecurityToken()} needs it 8637748cd8SNickeau */ 8737748cd8SNickeau global $INPUT; 8837748cd8SNickeau $INPUT->server->set('REMOTE_USER', $user); 8937748cd8SNickeau 9037748cd8SNickeau } 9137748cd8SNickeau 9237748cd8SNickeau /** 9337748cd8SNickeau * @return bool if edit auth 9437748cd8SNickeau */ 95*c3437056SNickeau public static function isWriter($pageId = null): bool 9637748cd8SNickeau { 97*c3437056SNickeau if ($pageId == null) { 98*c3437056SNickeau $pageId = Page::createPageFromGlobalDokuwikiId(); 99*c3437056SNickeau } 100*c3437056SNickeau if ($_SERVER['REMOTE_USER']) { 101*c3437056SNickeau $perm = auth_quickaclcheck($pageId); 102*c3437056SNickeau } else { 103*c3437056SNickeau $perm = auth_aclcheck($pageId, '', null); 104*c3437056SNickeau } 10537748cd8SNickeau 106*c3437056SNickeau if ($perm >= AUTH_EDIT) { 107*c3437056SNickeau return true; 108*c3437056SNickeau } else { 109*c3437056SNickeau return false; 110*c3437056SNickeau } 11137748cd8SNickeau 11237748cd8SNickeau } 11337748cd8SNickeau 11437748cd8SNickeau public static function isAdmin() 11537748cd8SNickeau { 11637748cd8SNickeau global $INFO; 11737748cd8SNickeau if (!empty($INFO)) { 11837748cd8SNickeau return $INFO['isadmin']; 11937748cd8SNickeau } else { 12037748cd8SNickeau return auth_isadmin(self::getUser(), self::getUserGroups()); 12137748cd8SNickeau } 12237748cd8SNickeau } 12337748cd8SNickeau 12437748cd8SNickeau public static function isMember($group) 12537748cd8SNickeau { 12637748cd8SNickeau 12737748cd8SNickeau return auth_isMember($group, self::getUser(), self::getUserGroups()); 12837748cd8SNickeau 12937748cd8SNickeau } 13037748cd8SNickeau 13137748cd8SNickeau public static function isManager() 13237748cd8SNickeau { 13337748cd8SNickeau global $INFO; 134*c3437056SNickeau if ($INFO !== null) { 13537748cd8SNickeau return $INFO['ismanager']; 136*c3437056SNickeau } else { 137*c3437056SNickeau /** 138*c3437056SNickeau * In test 139*c3437056SNickeau */ 140*c3437056SNickeau return auth_ismanager(); 141*c3437056SNickeau } 14237748cd8SNickeau } 14337748cd8SNickeau 144*c3437056SNickeau public static function getUser(): string 14537748cd8SNickeau { 14637748cd8SNickeau global $INPUT; 147*c3437056SNickeau $user = $INPUT->server->str('REMOTE_USER'); 148*c3437056SNickeau if (empty($user)) { 149*c3437056SNickeau return "Anonymous"; 150*c3437056SNickeau } 151*c3437056SNickeau return $user; 15237748cd8SNickeau } 15337748cd8SNickeau 15437748cd8SNickeau private static function getUserGroups() 15537748cd8SNickeau { 15637748cd8SNickeau global $USERINFO; 15737748cd8SNickeau return is_array($USERINFO) ? $USERINFO['grps'] : array(); 15837748cd8SNickeau } 15937748cd8SNickeau 16037748cd8SNickeau public static function getLogoHtml() 16137748cd8SNickeau { 16237748cd8SNickeau /** 16337748cd8SNickeau * Logo 16437748cd8SNickeau */ 16537748cd8SNickeau $tagAttributes = TagAttributes::createEmpty("register"); 16637748cd8SNickeau $tagAttributes->addComponentAttributeValue(Dimension::WIDTH_KEY, "72"); 16737748cd8SNickeau $tagAttributes->addComponentAttributeValue(Dimension::HEIGHT_KEY, "72"); 16837748cd8SNickeau $tagAttributes->addClassName("logo"); 16937748cd8SNickeau return Site::getLogoImgHtmlTag($tagAttributes); 17037748cd8SNickeau } 17137748cd8SNickeau 17237748cd8SNickeau /** 17337748cd8SNickeau * @param Doku_Form $form 17437748cd8SNickeau * @param string $classPrefix 17537748cd8SNickeau * @param bool $includeLogo 17637748cd8SNickeau * @return string 17737748cd8SNickeau */ 17837748cd8SNickeau public static function getHeaderHTML(Doku_Form $form, $classPrefix, $includeLogo = true) 17937748cd8SNickeau { 18037748cd8SNickeau if (isset($form->_content[0]["_legend"])) { 18137748cd8SNickeau 18237748cd8SNickeau $title = $form->_content[0]["_legend"]; 18337748cd8SNickeau /** 18437748cd8SNickeau * Logo 18537748cd8SNickeau */ 18637748cd8SNickeau $logoHtmlImgTag = ""; 18737748cd8SNickeau if ( 18837748cd8SNickeau PluginUtility::getConfValue(Identity::CONF_ENABLE_LOGO_ON_IDENTITY_FORMS, 1) 18937748cd8SNickeau && 19037748cd8SNickeau $includeLogo === true 19137748cd8SNickeau ) { 19237748cd8SNickeau $logoHtmlImgTag = Identity::getLogoHtml(); 19337748cd8SNickeau } 19437748cd8SNickeau /** 19537748cd8SNickeau * Don't use `header` in place of 19637748cd8SNickeau * div because this is a HTML5 tag 19737748cd8SNickeau * 19837748cd8SNickeau * On php 5.6, the php test library method {@link \phpQueryObject::htmlOuter()} 19937748cd8SNickeau * add the below meta tag 20037748cd8SNickeau * <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> 20137748cd8SNickeau * 20237748cd8SNickeau */ 20337748cd8SNickeau return <<<EOF 20437748cd8SNickeau<div class="$classPrefix-header"> 20537748cd8SNickeau $logoHtmlImgTag 20637748cd8SNickeau <h1>$title</h1> 20737748cd8SNickeau</div> 20837748cd8SNickeauEOF; 20937748cd8SNickeau } 21037748cd8SNickeau return ""; 21137748cd8SNickeau } 21237748cd8SNickeau 213*c3437056SNickeau public static function isReader(string $pageId): bool 214*c3437056SNickeau { 215*c3437056SNickeau $perm = self::getPerm($pageId); 216*c3437056SNickeau 217*c3437056SNickeau if ($perm >= AUTH_READ) { 218*c3437056SNickeau return true; 219*c3437056SNickeau } else { 220*c3437056SNickeau return false; 221*c3437056SNickeau } 222*c3437056SNickeau 223*c3437056SNickeau } 224*c3437056SNickeau 225*c3437056SNickeau private static function getPerm(string $pageId) 226*c3437056SNickeau { 227*c3437056SNickeau if ($pageId == null) { 228*c3437056SNickeau $pageId = Page::createPageFromRequestedPage()->getDokuwikiId(); 229*c3437056SNickeau } 230*c3437056SNickeau if ($_SERVER['REMOTE_USER']) { 231*c3437056SNickeau $perm = auth_quickaclcheck($pageId); 232*c3437056SNickeau } else { 233*c3437056SNickeau $perm = auth_aclcheck($pageId, '', null); 234*c3437056SNickeau } 235*c3437056SNickeau return $perm; 236*c3437056SNickeau } 237*c3437056SNickeau 23837748cd8SNickeau 23937748cd8SNickeau} 240