* */ namespace ComboStrap; use Doku_Form; use dokuwiki\Form\Form; use TestRequest; class Identity { const CANONICAL = "identity"; const CONF_ENABLE_LOGO_ON_IDENTITY_FORMS = "enableLogoOnIdentityForms"; const JS_NAVIGATION_ANONYMOUS_VALUE = "anonymous"; const JS_NAVIGATION_SIGNED_VALUE = "signed"; /** * A javascript indicator * to know if the user is logged in or not * (ie public or not) */ const JS_NAVIGATION_INDICATOR = "navigation"; const FORM_IDENTITY_CLASS = "form-identity"; /** * Is logged in * @return boolean */ public static function isLoggedIn() { $loggedIn = false; global $INPUT; if ($INPUT->server->has('REMOTE_USER')) { $loggedIn = true; } return $loggedIn; } /** * @param TestRequest $request * @param string $user */ public static function becomeSuperUser(&$request = null, $user = 'admin') { global $conf; $conf['useacl'] = 1; $conf['superuser'] = $user; $conf['remoteuser'] = $user; if ($request != null) { $request->setServer('REMOTE_USER', $user); } /** * used by {@link getSecurityToken()} */ global $INPUT; $INPUT->server->set('REMOTE_USER', $user); // same as $_SERVER['REMOTE_USER'] = $user; // $_SERVER[] = $user; // global $USERINFO; // $USERINFO['grps'] = array('admin', 'user'); // global $INFO; // $INFO['ismanager'] = true; } /** * @param $request * @param string $user - the user to login */ public static function logIn(&$request, $user = 'defaultUser') { $request->setServer('REMOTE_USER', $user); /** * The {@link getSecurityToken()} needs it */ global $INPUT; $INPUT->server->set('REMOTE_USER', $user); } /** * @return bool if edit auth */ public static function isWriter($pageId = null): bool { if ($pageId == null) { $pageId = Page::createPageFromGlobalDokuwikiId(); } if ($_SERVER['REMOTE_USER']) { $perm = auth_quickaclcheck($pageId); } else { $perm = auth_aclcheck($pageId, '', null); } if ($perm >= AUTH_EDIT) { return true; } else { return false; } } public static function isAdmin() { global $INFO; if (!empty($INFO)) { return $INFO['isadmin']; } else { return auth_isadmin(self::getUser(), self::getUserGroups()); } } public static function isMember($group) { return auth_isMember($group, self::getUser(), self::getUserGroups()); } public static function isManager() { global $INFO; if ($INFO !== null) { return $INFO['ismanager']; } else { /** * In test */ return auth_ismanager(); } } public static function getUser(): string { global $INPUT; $user = $INPUT->server->str('REMOTE_USER'); if (empty($user)) { return "Anonymous"; } return $user; } private static function getUserGroups() { global $USERINFO; return is_array($USERINFO) ? $USERINFO['grps'] : array(); } /** * @param Doku_Form|Form $form * @param string $classPrefix * @param bool $includeLogo * @return string */ public static function getHeaderHTML($form, $classPrefix, $includeLogo = true) { $class = get_class($form); switch ($class) { case Doku_Form::class: /** * Old one * @var Doku_Form $form */ $legend = $form->_content[0]["_legend"]; if (!isset($legend)) { return ""; } $title = $legend; break; case Form::class; /** * New One * @var Form $form */ $pos = $form->findPositionByType("fieldsetopen"); if ($pos == false) { return ""; } $title = $form->getElementAt($pos)->val(); break; default: LogUtility::msg("Internal Error: Unknown form class " . $class); return ""; } /** * Logo */ $logoHtmlImgTag = ""; if ( PluginUtility::getConfValue(Identity::CONF_ENABLE_LOGO_ON_IDENTITY_FORMS, 1) && $includeLogo === true ) { $logoHtmlImgTag = Site::getLogoHtml(); } /** * Don't use `header` in place of * div because this is a HTML5 tag * * On php 5.6, the php test library method {@link \phpQueryObject::htmlOuter()} * add the below meta tag * * */ return << $logoHtmlImgTag

$title

EOF; } public static function isReader(string $pageId): bool { $perm = self::getPerm($pageId); if ($perm >= AUTH_READ) { return true; } else { return false; } } private static function getPerm(string $pageId) { if ($pageId == null) { $pageId = Page::createPageFromRequestedPage()->getDokuwikiId(); } if ($_SERVER['REMOTE_USER']) { $perm = auth_quickaclcheck($pageId); } else { $perm = auth_aclcheck($pageId, '', null); } return $perm; } public static function addPrimaryColorCssRuleIfSet(?string $content): ?string { if ($content === null) { return null; } $primaryColor = Site::getPrimaryColorValue(); if ($primaryColor !== null) { $identityClass = self::FORM_IDENTITY_CLASS; $cssFormControl = BrandColors::getCssFormControlFocusColor($primaryColor); $content .= <<getInternalInlineAndFileContent(); $content = Identity::addPrimaryColorCssRuleIfSet($content); $class = $loginCss->getClass(); return << $content EOF; } public static function addIdentityClass(&$class, string $formClass) { $formClass = Identity::FORM_IDENTITY_CLASS . " " . $formClass; if (isset($class)) { $class .= " " . $formClass; } else { $class = $formClass; } } }