xref: /template/strap/ComboStrap/Identity.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
1*37748cd8SNickeau<?php
2*37748cd8SNickeau/**
3*37748cd8SNickeau * Copyright (c) 2021. ComboStrap, Inc. and its affiliates. All Rights Reserved.
4*37748cd8SNickeau *
5*37748cd8SNickeau * This source code is licensed under the GPL license found in the
6*37748cd8SNickeau * COPYING  file in the root directory of this source tree.
7*37748cd8SNickeau *
8*37748cd8SNickeau * @license  GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html)
9*37748cd8SNickeau * @author   ComboStrap <support@combostrap.com>
10*37748cd8SNickeau *
11*37748cd8SNickeau */
12*37748cd8SNickeau
13*37748cd8SNickeaunamespace ComboStrap;
14*37748cd8SNickeau
15*37748cd8SNickeau
16*37748cd8SNickeauuse Doku_Form;
17*37748cd8SNickeauuse TestRequest;
18*37748cd8SNickeau
19*37748cd8SNickeauclass Identity
20*37748cd8SNickeau{
21*37748cd8SNickeau
22*37748cd8SNickeau    const CANONICAL = "identity";
23*37748cd8SNickeau    const CONF_ENABLE_LOGO_ON_IDENTITY_FORMS = "enableLogoOnIdentityForms";
24*37748cd8SNickeau    const JS_NAVIGATION_ANONYMOUS_VALUE = "anonymous";
25*37748cd8SNickeau    const JS_NAVIGATION_SIGNED_VALUE = "signed";
26*37748cd8SNickeau    /**
27*37748cd8SNickeau     * A javascript indicator
28*37748cd8SNickeau     * to know if the user is logged in or not
29*37748cd8SNickeau     * (ie public or not)
30*37748cd8SNickeau     */
31*37748cd8SNickeau    const JS_NAVIGATION_INDICATOR = "navigation";
32*37748cd8SNickeau
33*37748cd8SNickeau    /**
34*37748cd8SNickeau     * Is logged in
35*37748cd8SNickeau     * @return boolean
36*37748cd8SNickeau     */
37*37748cd8SNickeau    public static function isLoggedIn()
38*37748cd8SNickeau    {
39*37748cd8SNickeau        $loggedIn = false;
40*37748cd8SNickeau        global $INPUT;
41*37748cd8SNickeau        if ($INPUT->server->has('REMOTE_USER')) {
42*37748cd8SNickeau            $loggedIn = true;
43*37748cd8SNickeau        }
44*37748cd8SNickeau        return $loggedIn;
45*37748cd8SNickeau    }
46*37748cd8SNickeau
47*37748cd8SNickeau    /**
48*37748cd8SNickeau     * @param TestRequest $request
49*37748cd8SNickeau     * @param string $user
50*37748cd8SNickeau     */
51*37748cd8SNickeau    public static function becomeSuperUser(&$request = null, $user = 'admin')
52*37748cd8SNickeau    {
53*37748cd8SNickeau        global $conf;
54*37748cd8SNickeau        $conf['useacl'] = 1;
55*37748cd8SNickeau        $conf['superuser'] = $user;
56*37748cd8SNickeau        $conf['remoteuser'] = $user;
57*37748cd8SNickeau
58*37748cd8SNickeau        if ($request != null) {
59*37748cd8SNickeau            $request->setServer('REMOTE_USER', $user);
60*37748cd8SNickeau        } else {
61*37748cd8SNickeau            global $INPUT;
62*37748cd8SNickeau            $INPUT->server->set('REMOTE_USER', $user);
63*37748cd8SNickeau        }
64*37748cd8SNickeau
65*37748cd8SNickeau        // $_SERVER[] = $user;
66*37748cd8SNickeau        // global $USERINFO;
67*37748cd8SNickeau        // $USERINFO['grps'] = array('admin', 'user');
68*37748cd8SNickeau
69*37748cd8SNickeau        // global $INFO;
70*37748cd8SNickeau        // $INFO['ismanager'] = true;
71*37748cd8SNickeau
72*37748cd8SNickeau    }
73*37748cd8SNickeau
74*37748cd8SNickeau    /**
75*37748cd8SNickeau     * @param $request
76*37748cd8SNickeau     * @param string $user - the user to login
77*37748cd8SNickeau     */
78*37748cd8SNickeau    public static function logIn(&$request, $user = 'defaultUser')
79*37748cd8SNickeau    {
80*37748cd8SNickeau
81*37748cd8SNickeau        $request->setServer('REMOTE_USER', $user);
82*37748cd8SNickeau
83*37748cd8SNickeau        /**
84*37748cd8SNickeau         * The {@link getSecurityToken()} needs it
85*37748cd8SNickeau         */
86*37748cd8SNickeau        global $INPUT;
87*37748cd8SNickeau        $INPUT->server->set('REMOTE_USER',$user);
88*37748cd8SNickeau
89*37748cd8SNickeau    }
90*37748cd8SNickeau
91*37748cd8SNickeau    /**
92*37748cd8SNickeau     * @return bool if edit auth
93*37748cd8SNickeau     */
94*37748cd8SNickeau    public static function isWriter()
95*37748cd8SNickeau    {
96*37748cd8SNickeau
97*37748cd8SNickeau        return auth_quickaclcheck(PluginUtility::getPageId()) >= AUTH_EDIT;
98*37748cd8SNickeau
99*37748cd8SNickeau    }
100*37748cd8SNickeau
101*37748cd8SNickeau    public static function isAdmin()
102*37748cd8SNickeau    {
103*37748cd8SNickeau        global $INFO;
104*37748cd8SNickeau        if (!empty($INFO)) {
105*37748cd8SNickeau            return $INFO['isadmin'];
106*37748cd8SNickeau        } else {
107*37748cd8SNickeau            return auth_isadmin(self::getUser(), self::getUserGroups());
108*37748cd8SNickeau        }
109*37748cd8SNickeau    }
110*37748cd8SNickeau
111*37748cd8SNickeau    public static function isMember($group)
112*37748cd8SNickeau    {
113*37748cd8SNickeau
114*37748cd8SNickeau        return auth_isMember($group, self::getUser(), self::getUserGroups());
115*37748cd8SNickeau
116*37748cd8SNickeau    }
117*37748cd8SNickeau
118*37748cd8SNickeau    public static function isManager()
119*37748cd8SNickeau    {
120*37748cd8SNickeau        global $INFO;
121*37748cd8SNickeau        return $INFO['ismanager'];
122*37748cd8SNickeau    }
123*37748cd8SNickeau
124*37748cd8SNickeau    private static function getUser()
125*37748cd8SNickeau    {
126*37748cd8SNickeau        global $INPUT;
127*37748cd8SNickeau        return $INPUT->server->str('REMOTE_USER');
128*37748cd8SNickeau    }
129*37748cd8SNickeau
130*37748cd8SNickeau    private static function getUserGroups()
131*37748cd8SNickeau    {
132*37748cd8SNickeau        global $USERINFO;
133*37748cd8SNickeau        return is_array($USERINFO) ? $USERINFO['grps'] : array();
134*37748cd8SNickeau    }
135*37748cd8SNickeau
136*37748cd8SNickeau    public static function getLogoHtml()
137*37748cd8SNickeau    {
138*37748cd8SNickeau        /**
139*37748cd8SNickeau         * Logo
140*37748cd8SNickeau         */
141*37748cd8SNickeau        $tagAttributes = TagAttributes::createEmpty("register");
142*37748cd8SNickeau        $tagAttributes->addComponentAttributeValue(Dimension::WIDTH_KEY, "72");
143*37748cd8SNickeau        $tagAttributes->addComponentAttributeValue(Dimension::HEIGHT_KEY, "72");
144*37748cd8SNickeau        $tagAttributes->addClassName("logo");
145*37748cd8SNickeau        return Site::getLogoImgHtmlTag($tagAttributes);
146*37748cd8SNickeau    }
147*37748cd8SNickeau
148*37748cd8SNickeau    /**
149*37748cd8SNickeau     * @param Doku_Form $form
150*37748cd8SNickeau     * @param string $classPrefix
151*37748cd8SNickeau     * @param bool $includeLogo
152*37748cd8SNickeau     * @return string
153*37748cd8SNickeau     */
154*37748cd8SNickeau    public static function getHeaderHTML(Doku_Form $form, $classPrefix, $includeLogo = true)
155*37748cd8SNickeau    {
156*37748cd8SNickeau        if (isset($form->_content[0]["_legend"])) {
157*37748cd8SNickeau
158*37748cd8SNickeau            $title = $form->_content[0]["_legend"];
159*37748cd8SNickeau            /**
160*37748cd8SNickeau             * Logo
161*37748cd8SNickeau             */
162*37748cd8SNickeau            $logoHtmlImgTag = "";
163*37748cd8SNickeau            if (
164*37748cd8SNickeau                PluginUtility::getConfValue(Identity::CONF_ENABLE_LOGO_ON_IDENTITY_FORMS, 1)
165*37748cd8SNickeau                &&
166*37748cd8SNickeau                $includeLogo === true
167*37748cd8SNickeau            ) {
168*37748cd8SNickeau                $logoHtmlImgTag = Identity::getLogoHtml();
169*37748cd8SNickeau            }
170*37748cd8SNickeau            /**
171*37748cd8SNickeau             * Don't use `header` in place of
172*37748cd8SNickeau             * div because this is a HTML5 tag
173*37748cd8SNickeau             *
174*37748cd8SNickeau             * On php 5.6, the php test library method {@link \phpQueryObject::htmlOuter()}
175*37748cd8SNickeau             * add the below meta tag
176*37748cd8SNickeau             * <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
177*37748cd8SNickeau             *
178*37748cd8SNickeau             */
179*37748cd8SNickeau            return <<<EOF
180*37748cd8SNickeau<div class="$classPrefix-header">
181*37748cd8SNickeau    $logoHtmlImgTag
182*37748cd8SNickeau    <h1>$title</h1>
183*37748cd8SNickeau</div>
184*37748cd8SNickeauEOF;
185*37748cd8SNickeau        }
186*37748cd8SNickeau        return "";
187*37748cd8SNickeau    }
188*37748cd8SNickeau
189*37748cd8SNickeau
190*37748cd8SNickeau}
191