xref: /template/strap/ComboStrap/Identity.php (revision 1fa8c418ed5809db58049141be41b7738471dd32)
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);
63*1fa8c418SNickeau            // 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     */
9537748cd8SNickeau    public static function isWriter()
9637748cd8SNickeau    {
9737748cd8SNickeau
9837748cd8SNickeau        return auth_quickaclcheck(PluginUtility::getPageId()) >= AUTH_EDIT;
9937748cd8SNickeau
10037748cd8SNickeau    }
10137748cd8SNickeau
10237748cd8SNickeau    public static function isAdmin()
10337748cd8SNickeau    {
10437748cd8SNickeau        global $INFO;
10537748cd8SNickeau        if (!empty($INFO)) {
10637748cd8SNickeau            return $INFO['isadmin'];
10737748cd8SNickeau        } else {
10837748cd8SNickeau            return auth_isadmin(self::getUser(), self::getUserGroups());
10937748cd8SNickeau        }
11037748cd8SNickeau    }
11137748cd8SNickeau
11237748cd8SNickeau    public static function isMember($group)
11337748cd8SNickeau    {
11437748cd8SNickeau
11537748cd8SNickeau        return auth_isMember($group, self::getUser(), self::getUserGroups());
11637748cd8SNickeau
11737748cd8SNickeau    }
11837748cd8SNickeau
11937748cd8SNickeau    public static function isManager()
12037748cd8SNickeau    {
12137748cd8SNickeau        global $INFO;
12237748cd8SNickeau        return $INFO['ismanager'];
12337748cd8SNickeau    }
12437748cd8SNickeau
12537748cd8SNickeau    private static function getUser()
12637748cd8SNickeau    {
12737748cd8SNickeau        global $INPUT;
12837748cd8SNickeau        return $INPUT->server->str('REMOTE_USER');
12937748cd8SNickeau    }
13037748cd8SNickeau
13137748cd8SNickeau    private static function getUserGroups()
13237748cd8SNickeau    {
13337748cd8SNickeau        global $USERINFO;
13437748cd8SNickeau        return is_array($USERINFO) ? $USERINFO['grps'] : array();
13537748cd8SNickeau    }
13637748cd8SNickeau
13737748cd8SNickeau    public static function getLogoHtml()
13837748cd8SNickeau    {
13937748cd8SNickeau        /**
14037748cd8SNickeau         * Logo
14137748cd8SNickeau         */
14237748cd8SNickeau        $tagAttributes = TagAttributes::createEmpty("register");
14337748cd8SNickeau        $tagAttributes->addComponentAttributeValue(Dimension::WIDTH_KEY, "72");
14437748cd8SNickeau        $tagAttributes->addComponentAttributeValue(Dimension::HEIGHT_KEY, "72");
14537748cd8SNickeau        $tagAttributes->addClassName("logo");
14637748cd8SNickeau        return Site::getLogoImgHtmlTag($tagAttributes);
14737748cd8SNickeau    }
14837748cd8SNickeau
14937748cd8SNickeau    /**
15037748cd8SNickeau     * @param Doku_Form $form
15137748cd8SNickeau     * @param string $classPrefix
15237748cd8SNickeau     * @param bool $includeLogo
15337748cd8SNickeau     * @return string
15437748cd8SNickeau     */
15537748cd8SNickeau    public static function getHeaderHTML(Doku_Form $form, $classPrefix, $includeLogo = true)
15637748cd8SNickeau    {
15737748cd8SNickeau        if (isset($form->_content[0]["_legend"])) {
15837748cd8SNickeau
15937748cd8SNickeau            $title = $form->_content[0]["_legend"];
16037748cd8SNickeau            /**
16137748cd8SNickeau             * Logo
16237748cd8SNickeau             */
16337748cd8SNickeau            $logoHtmlImgTag = "";
16437748cd8SNickeau            if (
16537748cd8SNickeau                PluginUtility::getConfValue(Identity::CONF_ENABLE_LOGO_ON_IDENTITY_FORMS, 1)
16637748cd8SNickeau                &&
16737748cd8SNickeau                $includeLogo === true
16837748cd8SNickeau            ) {
16937748cd8SNickeau                $logoHtmlImgTag = Identity::getLogoHtml();
17037748cd8SNickeau            }
17137748cd8SNickeau            /**
17237748cd8SNickeau             * Don't use `header` in place of
17337748cd8SNickeau             * div because this is a HTML5 tag
17437748cd8SNickeau             *
17537748cd8SNickeau             * On php 5.6, the php test library method {@link \phpQueryObject::htmlOuter()}
17637748cd8SNickeau             * add the below meta tag
17737748cd8SNickeau             * <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
17837748cd8SNickeau             *
17937748cd8SNickeau             */
18037748cd8SNickeau            return <<<EOF
18137748cd8SNickeau<div class="$classPrefix-header">
18237748cd8SNickeau    $logoHtmlImgTag
18337748cd8SNickeau    <h1>$title</h1>
18437748cd8SNickeau</div>
18537748cd8SNickeauEOF;
18637748cd8SNickeau        }
18737748cd8SNickeau        return "";
18837748cd8SNickeau    }
18937748cd8SNickeau
19037748cd8SNickeau
19137748cd8SNickeau}
192