xref: /template/strap/ComboStrap/Identity.php (revision c3437056399326d621a01da73b649707fbb0ae69)
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