/web/htdocs/www.euroroma.net/home/zenphoto/zp-core/zp-extensions/http_auth.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php

/**
 *  Tries to authorize user based on Apache HTTP authentication credentials
 *
 * The <var>PHP_AUTH_USER</var> is mapped to a Zenphoto user
 * the <var>PHP_AUTH_PW</var> must be in cleartext and match the Zenphoto user's password
 * (If the User validation is set to <i>trusted</i> the <var>PHP_AUTH_PW</var> password will be ignored and
 * need not be cleartext.)
 *
 * Note that the HTTP logins are outside of Zenphoto so there is no security logging of
 * them. Nor can Zenphoto "log off" the user. The normal logout links will not show for
 * users logged in via this plugin.
 *
 * Apache configuration:
 *     <ul>
 * <li>Run the Apache <var>htpasswd</var> utility to create a password file containing your first user:
 *         <i>path to apache executables</i> <var>htpasswd -cp</var> <i>path to apache folder</i> <var>passwords user1</var><br><br>
 * <var>htpasswd</var> will prompt you for the password. You can repeat the process for each additional user
 * or you can simply edit the <i>passwords</i> file with a text editor.<br><br>
 * Each <i>user/password</i> must match to a Zenphoto <i>user/password</i> or access to Zenphoto will be at a <i>guest</i>
 * level. If a user changes his password in Zenphoto someone must make the equivalent change in
 * the Apache password file for the Zenphoto user access to succeed. (However, see the <i>User validation</i>
 * option.)</li>
 *
 * <li>Create a file named "groups" in your apache folder</li>
 * <li>Edit the "groups" file with a line similar to:
 *         <var>zenphoto: stephen george frank</var>.
 * This creates a group named zenphoto with the list of users as members</li>
 *
 * <li>Add the following lines to your Zenphoto root .htaccess file after the initial comments and
 * before the rewrite rules:
 *     <ul>
 *         <li>AuthType Basic</li>
 *         <li>AuthName "Zenphoto realm"</li>
 *         <li>AuthUserFile c:/wamp/bin/apache/passwords</li>
 *         <li>AuthGroupFile c:/wamp/bin/apache/groups</li>
 *         <li>Require group zenphoto</li>
 *     </ul>
 *     </li>
 *     </ul>
 *
 *
 * @author Stephen Billard (sbillard)
 * @package plugins
 * @subpackage users
 */
$plugin_is_filter CLASS_PLUGIN;
$plugin_description gettext('Checks for Apache HTTP authentication of authorized users.');
$plugin_author "Stephen Billard (sbillard)";

$option_interface 'http_auth';

zp_register_filter('authorization_cookie''http_auth::check');

class 
http_auth {

    
/**
     * class instantiation function
     *
     * @return http_auth
     */
    
function http_auth() {
        
setOptionDefault('http_auth_trust'0);
    }

    
/**
     * Reports the supported options
     *
     * @return array
     */
    
function getOptionsSupported() {
        return array(
gettext('User validation') => array('key'             => 'http_auth_trust''type'         => OPTION_TYPE_RADIO,
                                        
'buttons'     => array(gettext('verify')     => '0'gettext('trusted') => '1'),
                                        
'desc'         => gettext('Set to <em>trusted</em> to presume the HTTP user is securely authorized. (This setting does not verify passwords against the Zenphoto user.)')));
    }

    function 
handleOption($option$currentValue) {

    }

    static function 
check($authorized) {
        global 
$_zp_current_admin_obj;
        if (!
$authorized) {
            
// not logged in via normal Zenphoto handling
            // PHP-CGI auth fixd
            
if (isset($_SERVER['HTTP_AUTHORIZATION'])) {
                
$auth_params explode(":"base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
                
$_SERVER['PHP_AUTH_USER'] = $auth_params[0];
                unset(
$auth_params[0]);
                
$_SERVER['PHP_AUTH_PW'] = implode(''$auth_params);
            }
            if (isset(
$_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {
                
$auth_params explode(":"base64_decode(substr($_SERVER['REDIRECT_HTTP_AUTHORIZATION'], 6)));
                
$_SERVER['PHP_AUTH_USER'] = $auth_params[0];
                unset(
$auth_params[0]);
                
$_SERVER['PHP_AUTH_PW'] = implode(''$auth_params);
            }

            if (
array_key_exists('PHP_AUTH_USER'$_SERVER) && array_key_exists('PHP_AUTH_PW'$_SERVER)) {
                
$user $_SERVER['PHP_AUTH_USER'];
                
$pass $_SERVER['PHP_AUTH_PW'];
                if (
getOption('http_auth_trust')) {
                    
$userobj Zenphoto_Authority::getAnAdmin(array('`user`='     => $user'`valid`=' => 1));
                } else {
                    
$userobj Zenphoto_Authority::checkLogon($user$pass);
                }
                if (
$userobj) {
                    
$_zp_current_admin_obj $userobj;
                    
$_zp_current_admin_obj->logout_link false;
                    
$authorized $_zp_current_admin_obj->getRights();
                }
            }
        }
        return 
$authorized;
    }

}

?>