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 334cadd4f8SNickeau const FORM_IDENTITY_CLASS = "form-identity"; 344cadd4f8SNickeau 3537748cd8SNickeau /** 3637748cd8SNickeau * Is logged in 3737748cd8SNickeau * @return boolean 3837748cd8SNickeau */ 3937748cd8SNickeau public static function isLoggedIn() 4037748cd8SNickeau { 4137748cd8SNickeau $loggedIn = false; 4237748cd8SNickeau global $INPUT; 4337748cd8SNickeau if ($INPUT->server->has('REMOTE_USER')) { 4437748cd8SNickeau $loggedIn = true; 4537748cd8SNickeau } 4637748cd8SNickeau return $loggedIn; 4737748cd8SNickeau } 4837748cd8SNickeau 4937748cd8SNickeau /** 5037748cd8SNickeau * @param TestRequest $request 5137748cd8SNickeau * @param string $user 5237748cd8SNickeau */ 5337748cd8SNickeau public static function becomeSuperUser(&$request = null, $user = 'admin') 5437748cd8SNickeau { 5537748cd8SNickeau global $conf; 5637748cd8SNickeau $conf['useacl'] = 1; 5737748cd8SNickeau $conf['superuser'] = $user; 5837748cd8SNickeau $conf['remoteuser'] = $user; 5937748cd8SNickeau 6037748cd8SNickeau if ($request != null) { 6137748cd8SNickeau $request->setServer('REMOTE_USER', $user); 62*918039dbSgerardnico } 63*918039dbSgerardnico 64*918039dbSgerardnico /** 65*918039dbSgerardnico * used by {@link getSecurityToken()} 66*918039dbSgerardnico */ 6737748cd8SNickeau global $INPUT; 6837748cd8SNickeau $INPUT->server->set('REMOTE_USER', $user); 691fa8c418SNickeau // same as $_SERVER['REMOTE_USER'] = $user; 70*918039dbSgerardnico 7137748cd8SNickeau 7237748cd8SNickeau // $_SERVER[] = $user; 7337748cd8SNickeau // global $USERINFO; 7437748cd8SNickeau // $USERINFO['grps'] = array('admin', 'user'); 7537748cd8SNickeau 7637748cd8SNickeau // global $INFO; 7737748cd8SNickeau // $INFO['ismanager'] = true; 7837748cd8SNickeau 7937748cd8SNickeau } 8037748cd8SNickeau 8137748cd8SNickeau /** 8237748cd8SNickeau * @param $request 8337748cd8SNickeau * @param string $user - the user to login 8437748cd8SNickeau */ 8537748cd8SNickeau public static function logIn(&$request, $user = 'defaultUser') 8637748cd8SNickeau { 8737748cd8SNickeau 8837748cd8SNickeau $request->setServer('REMOTE_USER', $user); 8937748cd8SNickeau 9037748cd8SNickeau /** 9137748cd8SNickeau * The {@link getSecurityToken()} needs it 9237748cd8SNickeau */ 9337748cd8SNickeau global $INPUT; 9437748cd8SNickeau $INPUT->server->set('REMOTE_USER', $user); 9537748cd8SNickeau 9637748cd8SNickeau } 9737748cd8SNickeau 9837748cd8SNickeau /** 9937748cd8SNickeau * @return bool if edit auth 10037748cd8SNickeau */ 101c3437056SNickeau public static function isWriter($pageId = null): bool 10237748cd8SNickeau { 103c3437056SNickeau if ($pageId == null) { 104c3437056SNickeau $pageId = Page::createPageFromGlobalDokuwikiId(); 105c3437056SNickeau } 106c3437056SNickeau if ($_SERVER['REMOTE_USER']) { 107c3437056SNickeau $perm = auth_quickaclcheck($pageId); 108c3437056SNickeau } else { 109c3437056SNickeau $perm = auth_aclcheck($pageId, '', null); 110c3437056SNickeau } 11137748cd8SNickeau 112c3437056SNickeau if ($perm >= AUTH_EDIT) { 113c3437056SNickeau return true; 114c3437056SNickeau } else { 115c3437056SNickeau return false; 116c3437056SNickeau } 11737748cd8SNickeau 11837748cd8SNickeau } 11937748cd8SNickeau 12037748cd8SNickeau public static function isAdmin() 12137748cd8SNickeau { 12237748cd8SNickeau global $INFO; 12337748cd8SNickeau if (!empty($INFO)) { 12437748cd8SNickeau return $INFO['isadmin']; 12537748cd8SNickeau } else { 12637748cd8SNickeau return auth_isadmin(self::getUser(), self::getUserGroups()); 12737748cd8SNickeau } 12837748cd8SNickeau } 12937748cd8SNickeau 13037748cd8SNickeau public static function isMember($group) 13137748cd8SNickeau { 13237748cd8SNickeau 13337748cd8SNickeau return auth_isMember($group, self::getUser(), self::getUserGroups()); 13437748cd8SNickeau 13537748cd8SNickeau } 13637748cd8SNickeau 13737748cd8SNickeau public static function isManager() 13837748cd8SNickeau { 13937748cd8SNickeau global $INFO; 140c3437056SNickeau if ($INFO !== null) { 14137748cd8SNickeau return $INFO['ismanager']; 142c3437056SNickeau } else { 143c3437056SNickeau /** 144c3437056SNickeau * In test 145c3437056SNickeau */ 146c3437056SNickeau return auth_ismanager(); 147c3437056SNickeau } 14837748cd8SNickeau } 14937748cd8SNickeau 150c3437056SNickeau public static function getUser(): string 15137748cd8SNickeau { 15237748cd8SNickeau global $INPUT; 153c3437056SNickeau $user = $INPUT->server->str('REMOTE_USER'); 154c3437056SNickeau if (empty($user)) { 155c3437056SNickeau return "Anonymous"; 156c3437056SNickeau } 157c3437056SNickeau return $user; 15837748cd8SNickeau } 15937748cd8SNickeau 16037748cd8SNickeau private static function getUserGroups() 16137748cd8SNickeau { 16237748cd8SNickeau global $USERINFO; 16337748cd8SNickeau return is_array($USERINFO) ? $USERINFO['grps'] : array(); 16437748cd8SNickeau } 16537748cd8SNickeau 16637748cd8SNickeau /** 16737748cd8SNickeau * @param Doku_Form $form 16837748cd8SNickeau * @param string $classPrefix 16937748cd8SNickeau * @param bool $includeLogo 17037748cd8SNickeau * @return string 17137748cd8SNickeau */ 17237748cd8SNickeau public static function getHeaderHTML(Doku_Form $form, $classPrefix, $includeLogo = true) 17337748cd8SNickeau { 17437748cd8SNickeau if (isset($form->_content[0]["_legend"])) { 17537748cd8SNickeau 17637748cd8SNickeau $title = $form->_content[0]["_legend"]; 17737748cd8SNickeau /** 17837748cd8SNickeau * Logo 17937748cd8SNickeau */ 18037748cd8SNickeau $logoHtmlImgTag = ""; 18137748cd8SNickeau if ( 18237748cd8SNickeau PluginUtility::getConfValue(Identity::CONF_ENABLE_LOGO_ON_IDENTITY_FORMS, 1) 18337748cd8SNickeau && 18437748cd8SNickeau $includeLogo === true 18537748cd8SNickeau ) { 1864cadd4f8SNickeau $logoHtmlImgTag = Site::getLogoHtml(); 18737748cd8SNickeau } 18837748cd8SNickeau /** 18937748cd8SNickeau * Don't use `header` in place of 19037748cd8SNickeau * div because this is a HTML5 tag 19137748cd8SNickeau * 19237748cd8SNickeau * On php 5.6, the php test library method {@link \phpQueryObject::htmlOuter()} 19337748cd8SNickeau * add the below meta tag 19437748cd8SNickeau * <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> 19537748cd8SNickeau * 19637748cd8SNickeau */ 19737748cd8SNickeau return <<<EOF 19837748cd8SNickeau<div class="$classPrefix-header"> 19937748cd8SNickeau $logoHtmlImgTag 20037748cd8SNickeau <h1>$title</h1> 20137748cd8SNickeau</div> 20237748cd8SNickeauEOF; 20337748cd8SNickeau } 20437748cd8SNickeau return ""; 20537748cd8SNickeau } 20637748cd8SNickeau 207c3437056SNickeau public static function isReader(string $pageId): bool 208c3437056SNickeau { 209c3437056SNickeau $perm = self::getPerm($pageId); 210c3437056SNickeau 211c3437056SNickeau if ($perm >= AUTH_READ) { 212c3437056SNickeau return true; 213c3437056SNickeau } else { 214c3437056SNickeau return false; 215c3437056SNickeau } 216c3437056SNickeau 217c3437056SNickeau } 218c3437056SNickeau 219c3437056SNickeau private static function getPerm(string $pageId) 220c3437056SNickeau { 221c3437056SNickeau if ($pageId == null) { 222c3437056SNickeau $pageId = Page::createPageFromRequestedPage()->getDokuwikiId(); 223c3437056SNickeau } 224c3437056SNickeau if ($_SERVER['REMOTE_USER']) { 225c3437056SNickeau $perm = auth_quickaclcheck($pageId); 226c3437056SNickeau } else { 227c3437056SNickeau $perm = auth_aclcheck($pageId, '', null); 228c3437056SNickeau } 229c3437056SNickeau return $perm; 230c3437056SNickeau } 231c3437056SNickeau 2324cadd4f8SNickeau public static function addPrimaryColorCssRuleIfSet(?string $content): ?string 2334cadd4f8SNickeau { 2344cadd4f8SNickeau if ($content === null) { 2354cadd4f8SNickeau return null; 2364cadd4f8SNickeau } 2374cadd4f8SNickeau $primaryColor = Site::getPrimaryColorValue(); 2384cadd4f8SNickeau if ($primaryColor !== null) { 2394cadd4f8SNickeau $identityClass = self::FORM_IDENTITY_CLASS; 2404cadd4f8SNickeau $content .= <<<EOF 2414cadd4f8SNickeau.$identityClass button[type="submit"]{ 2424cadd4f8SNickeau background-color: $primaryColor; 2434cadd4f8SNickeau border-color: $primaryColor; 2444cadd4f8SNickeau} 2454cadd4f8SNickeauEOF; 2464cadd4f8SNickeau } 2474cadd4f8SNickeau return $content; 2484cadd4f8SNickeau } 2494cadd4f8SNickeau 2504cadd4f8SNickeau public static function getHtmlStyleTag(string $componentId): string 2514cadd4f8SNickeau { 2524cadd4f8SNickeau $loginCss = Snippet::createInternalCssSnippet($componentId); 2534cadd4f8SNickeau $content = $loginCss->getInternalInlineAndFileContent(); 2544cadd4f8SNickeau $content = Identity::addPrimaryColorCssRuleIfSet($content); 2554cadd4f8SNickeau $class = $loginCss->getClass(); 2564cadd4f8SNickeau return <<<EOF 2574cadd4f8SNickeau<style class="$class"> 2584cadd4f8SNickeau$content 2594cadd4f8SNickeau</style> 2604cadd4f8SNickeauEOF; 2614cadd4f8SNickeau 2624cadd4f8SNickeau } 2634cadd4f8SNickeau 2644cadd4f8SNickeau public static function addIdentityClass(&$class, string $formClass) 2654cadd4f8SNickeau { 2664cadd4f8SNickeau 2674cadd4f8SNickeau $formClass = Identity::FORM_IDENTITY_CLASS . " " . $formClass; 2684cadd4f8SNickeau if (isset($class)) { 2694cadd4f8SNickeau $class .= " " . $formClass; 2704cadd4f8SNickeau } else { 2714cadd4f8SNickeau $class = $formClass; 2724cadd4f8SNickeau } 2734cadd4f8SNickeau 2744cadd4f8SNickeau } 2754cadd4f8SNickeau 27637748cd8SNickeau 27737748cd8SNickeau} 278