Annotation of FreeBSD/tinderbox/webui/module/moduleUsers.php, revision 1.1

1.1     ! as          1: <?php
        !             2: #-
        !             3: # Copyright (c) 2005 Oliver Lehmann <oliver@FreeBSD.org>
        !             4: # All rights reserved.
        !             5: #
        !             6: # Redistribution and use in source and binary forms, with or without
        !             7: # modification, are permitted provided that the following conditions
        !             8: # are met:
        !             9: # 1. Redistributions of source code must retain the above copyright
        !            10: #    notice, this list of conditions and the following disclaimer
        !            11: # 2. Redistributions in binary form must reproduce the above copyright
        !            12: #    notice, this list of conditions and the following disclaimer in the
        !            13: #    documentation and/or other materials provided with the distribution.
        !            14: #
        !            15: # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
        !            16: # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            17: # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            18: # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
        !            19: # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            20: # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            21: # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            22: # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            23: # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            24: # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            25: # SUCH DAMAGE.
        !            26: #
        !            27: # $MCom: portstools/tinderbox/webui/module/moduleUsers.php,v 1.18 2007/10/13 02:28:48 ade Exp $
        !            28: #
        !            29: 
        !            30: require_once 'module/module.php';
        !            31: require_once 'module/moduleBuilds.php';
        !            32: 
        !            33: class moduleUsers extends module {
        !            34: 
        !            35:        var $permissions;
        !            36: 
        !            37:        function moduleUsers() {
        !            38:                $this->module();
        !            39:                $this->moduleBuilds = new moduleBuilds();
        !            40:        }
        !            41: 
        !            42:        function display_login() {
        !            43:                global $moduleSession;
        !            44: 
        !            45:                if( $this->is_logged_in() ) {
        !            46:                        $user = $moduleSession->getAttribute( 'user' );
        !            47:                        $this->template_assign( 'user_name', $user->getName() );
        !            48:                        $this->template_assign( 'user_id',   $user->getId() );
        !            49:                        if( $this->checkWwwAdmin() ) {
        !            50:                                $this->template_assign( 'is_www_admin', true );
        !            51:                                $this->template_assign( 'all_users', $this->get_all_users() );
        !            52:                        } else {
        !            53:                                $this->template_assign( 'is_www_admin', false );
        !            54:                        }
        !            55:                } else {
        !            56:                        $this->template_assign( 'user_name', '' );
        !            57:                }
        !            58: 
        !            59:                return $this->template_parse( 'display_login.tpl' );
        !            60:        }
        !            61: 
        !            62:        function display_add_user( $user_name, $user_email, $user_password, $www_enabled ) {
        !            63:                if( !$this->is_logged_in() ) {
        !            64:                        return $this->template_parse( 'please_login.tpl' );
        !            65:                } elseif ( $this->checkWwwAdmin() ) {
        !            66:                        $user_properties  = $this->display_properties( '', $user_name, $user_email, $user_password, $www_enabled );
        !            67: 
        !            68:                        $this->template_assign( 'user_properties',  $user_properties  );
        !            69:                } else {
        !            70:                        $this->TinderboxDS->addError( permission_denied );
        !            71:                        return $this->template_parse( 'user_admin.tpl' );
        !            72:                }
        !            73:                $this->template_assign( 'add',    true  );
        !            74:                $this->template_assign( 'modify', false );
        !            75:                return $this->template_parse( 'user_admin.tpl' );
        !            76:        }
        !            77: 
        !            78:        function display_modify_user( $first, $user_id, $user_name, $user_email, $user_password, $www_enabled ) {
        !            79:                if( !$this->is_logged_in() ) {
        !            80:                        return $this->template_parse( 'please_login.tpl' );
        !            81:                }
        !            82: 
        !            83:                $user = $this->TinderboxDS->getUserById( $user_id );
        !            84:                if( $first == 1 ) {
        !            85:                        $user_name     = $user->getName();
        !            86:                        $user_email    = $user->getEmail();
        !            87:                        $www_enabled   = $user->getWwwEnabled();
        !            88:                        $all_builds    = $this->moduleBuilds->get_all_builds();
        !            89:                }
        !            90: 
        !            91:                if( $this->checkWwwAdmin() || ( $this->get_id() == $user->getId() ) ) {
        !            92:                        $user_properties  = $this->display_properties( $user_id, $user_name, $user_email, $user_password, $www_enabled );
        !            93: 
        !            94:                        $this->template_assign( 'user_properties',  $user_properties  );
        !            95:                } else {
        !            96:                        $this->TinderboxDS->addError( permission_denied );
        !            97:                        return $this->template_parse( 'user_admin.tpl' );
        !            98:                }
        !            99:                $this->template_assign( 'add',    false );
        !           100:                $this->template_assign( 'modify', true  );
        !           101:                return $this->template_parse( 'user_admin.tpl' );
        !           102:        }
        !           103: 
        !           104:        function display_properties( $user_id, $user_name, $user_email, $user_password, $www_enabled ) {
        !           105:                $this->template_assign( 'user_id',       $user_id       );
        !           106:                $this->template_assign( 'user_name',     $user_name     );
        !           107:                $this->template_assign( 'user_email',    $user_email    );
        !           108:                $this->template_assign( 'user_password', $user_password );
        !           109:                $this->template_assign( 'www_enabled',   $www_enabled   );
        !           110:                $this->template_assign( 'www_admin',     $this->checkWwwAdmin() );
        !           111:                return $this->template_parse( 'user_properties.tpl' );
        !           112:        }
        !           113: 
        !           114:        function action_user( $action, $user_id, $user_name, $user_email, $user_password, $www_enabled ) {
        !           115:                if( !$this->is_logged_in() ) {
        !           116:                        return $this->template_parse( 'please_login.tpl' );
        !           117:                } elseif( empty( $user_name ) ) {
        !           118:                        $this->TinderboxDS->addError( user_admin_user_name_empty );
        !           119:                        return '0';
        !           120:                } elseif( $action == 'add' && !$this->checkWwwAdmin() ) {
        !           121:                        $this->TinderboxDS->addError( permission_denied );
        !           122:                        return '0';
        !           123:                } elseif( $action != 'add' && ( !$this->checkWwwAdmin() && ( $this->get_id() != $user_id ) ) ) {
        !           124:                        $this->TinderboxDS->addError( permission_denied );
        !           125:                        return '0';
        !           126:                }
        !           127: 
        !           128:                switch( $action ) {
        !           129:                        case 'add':     $user = new User();
        !           130:                                        $user2 = $this->TinderboxDS->getUserByName( $user_name );
        !           131:                                        if( is_object( $user2 ) && $user2->getId() ) {
        !           132:                                                $this->TinderboxDS->addError( user_admin_user_exists." (".$user_name.")" );
        !           133:                                                return '0';
        !           134:                                        }
        !           135:                                        unset( $user2 );
        !           136:                                        break;
        !           137:                        case 'modify':  $user = $this->TinderboxDS->getUserById( $user_id );
        !           138:                                        if( !is_object( $user ) || !$user->getId() ) {
        !           139:                                                $this->TinderboxDS->addError( user_admin_user_not_exist );
        !           140:                                                return '0';
        !           141:                                        }
        !           142:                                        if( $user_name != $user->getName() ) {
        !           143:                                                if( !$this->checkWwwAdmin() ) {
        !           144:                                                        $this->TinderboxDS->addError( user_admin_user_name_changed );
        !           145:                                                        return '0';
        !           146:                                                } else {
        !           147:                                                        $user2 = $this->TinderboxDS->getUserByName( $user_name );
        !           148:                                                        if( is_object( $user2 ) && $user2->getId() ) {
        !           149:                                                                $this->TinderboxDS->addError( user_admin_user_exists." (".$user_name.")" );
        !           150:                                                                return '0';
        !           151:                                                        }
        !           152:                                                        unset( $user2 );
        !           153:                                                }
        !           154:                                        }
        !           155:                                        break;
        !           156:                        case 'delete':  $user = $this->TinderboxDS->getUserById( $user_id );
        !           157:                                        if( !is_object( $user ) || !$user->getId() ) {
        !           158:                                                $this->TinderboxDS->addError( user_admin_user_not_exist );
        !           159:                                                return '0';
        !           160:                                        }
        !           161:                                        break;
        !           162:                        default:        return '0';
        !           163:                                        break;
        !           164:                }
        !           165: 
        !           166:                switch( $www_enabled ) {
        !           167:                        case '1':       $www_enabled = 1; break;
        !           168:                        default:        $www_enabled = 0; break;
        !           169:                }
        !           170: 
        !           171:                $user->setName( $user_name );
        !           172:                $user->setEmail( $user_email );
        !           173:                $user->setWwwEnabled( $www_enabled );
        !           174:                if( $user_password ) {
        !           175:                        $user->setPassword( cryptPassword( $user_password ) );
        !           176:                }
        !           177: 
        !           178:                $this->TinderboxDS->start_transaction();
        !           179: 
        !           180:                switch( $action ) {
        !           181:                        case 'add':     if( !$this->TinderboxDS->addUser( $user ) ) {
        !           182:                                                $this->TinderboxDS->rollback_transaction();
        !           183:                                                return '0';
        !           184:                                        }
        !           185:                                        $user = $this->TinderboxDS->getUserByName( $user_name );
        !           186:                                        break;
        !           187:                        case 'modify':  if( !$this->TinderboxDS->updateUser( $user ) ) {
        !           188:                                                $this->TinderboxDS->rollback_transaction();
        !           189:                                                return '0';
        !           190:                                        }
        !           191:                                        if( $this->checkWwwAdmin() && !$this->TinderboxDS->deleteUserPermissions( $user, 'builds' ) ) {
        !           192:                                                $this->TinderboxDS->rollback_transaction();
        !           193:                                                return '0';
        !           194:                                        }
        !           195:                                        break;
        !           196:                        case 'delete':  if( !$this->TinderboxDS->deleteUser( $user ) ) {
        !           197:                                                $this->TinderboxDS->rollback_transaction();
        !           198:                                                return '0';
        !           199:                                        } else {
        !           200:                                                $this->TinderboxDS->commit_transaction();
        !           201:                                                return '1';
        !           202:                                        }
        !           203:                                        break;
        !           204:                }
        !           205: 
        !           206:                $this->TinderboxDS->commit_transaction();
        !           207:                return '1';
        !           208:        }
        !           209: 
        !           210:        function do_login( $username, $password ) {
        !           211:                global $moduleSession;
        !           212: 
        !           213:                $user = $this->TinderboxDS->getUserByLogin( $username, $password );
        !           214:                if( $user ) {
        !           215:                        if(  $user->getWwwEnabled() ) {
        !           216:                                $moduleSession->setAttribute( 'user', $user );
        !           217:                                return true;
        !           218:                        } else {
        !           219:                                $this->TinderboxDS->addError( user_login_not_enabled );
        !           220:                        }
        !           221:                } else {
        !           222:                        $this->TinderboxDS->addError( user_login_wrong_data );
        !           223:                }
        !           224: 
        !           225:                return false;
        !           226:        }
        !           227: 
        !           228:        function do_logout() {
        !           229:                global $moduleSession;
        !           230: 
        !           231:                $moduleSession->removeAttribute( 'user' );
        !           232:                $moduleSession->destroy();
        !           233: 
        !           234:                return true;
        !           235:        }
        !           236: 
        !           237:        function is_logged_in() {
        !           238:                global $moduleSession;
        !           239: 
        !           240:                $user = $moduleSession->getAttribute( 'user' );
        !           241: 
        !           242:                if( is_object( $user ) && $user->getWwwEnabled() == 1 ) {
        !           243:                        return true;
        !           244:                }
        !           245:                return false;
        !           246:        }
        !           247: 
        !           248:        function get_www_enabled() {
        !           249:                global $moduleSession;
        !           250:                $user = $moduleSession->getAttribute( 'user' );
        !           251: 
        !           252:                $userobj = $this->TinderboxDS->getUserById( $user->getId() );
        !           253:                if( is_object( $userobj ) ) {
        !           254:                        return $userobj->getWwwEnabled();
        !           255:                }
        !           256: 
        !           257:                return false;
        !           258:        }
        !           259: 
        !           260:        function get_id() {
        !           261:                global $moduleSession;
        !           262:                $user = $moduleSession->getAttribute( 'user' );
        !           263: 
        !           264:                return $user->getId();
        !           265:        }
        !           266: 
        !           267:        function get_all_users() {
        !           268:                $all_users_raw = $this->TinderboxDS->getAllUsers();
        !           269:                $all_users = array();
        !           270:                foreach( $all_users_raw as $user ) {
        !           271:                        $all_users[] = array( 'user_id' => $user->getId(), 'user_name' => $user->getName() );
        !           272:                }
        !           273:                return $all_users;
        !           274:        }
        !           275: 
        !           276:        function fetch_permissions( $object_type, $object_id ) {
        !           277:                global $moduleSession;
        !           278: 
        !           279:                if( $this->is_logged_in() ) {
        !           280:                        $user = $moduleSession->getAttribute( 'user' );
        !           281:                        foreach( $this->TinderboxDS->getUserPermissions( $user->getId(), $object_type, $object_id ) as $perm ) {
        !           282:                                $this->permissions[$object_type][$object_id][$perm['user_permission']] = 1;
        !           283:                        }
        !           284:                        $this->permissions[$object_type][$object_id]['set'] = 1;
        !           285:                        return true;
        !           286:                } else {
        !           287:                        return false;
        !           288:                }
        !           289:        }
        !           290: 
        !           291:        function get_permission( $object_type, $object_id, $permission ) {
        !           292:                if( !is_array( $this->permissions[$object_type][$object_id] ) && !isset( $this->permissions[$object_type][$object_id]['set'] ) ) {
        !           293:                        $this->fetch_permissions( $object_type, $object_id );
        !           294:                }
        !           295:                if( isset( $this->permissions[$object_type][$object_id][$permission] ) ) {
        !           296:                        return true;
        !           297:                } else {
        !           298:                        return false;
        !           299:                }
        !           300:        }
        !           301: 
        !           302:        function checkWwwAdmin() {
        !           303:                return $this->get_permission( 'users', $this->get_id(), 'IS_WWW_ADMIN' );
        !           304:        }
        !           305: }
        !           306: 
        !           307:        function checkPermAddQueue( $object_type, $object_id ) {
        !           308:                return $this->get_permission( $object_type, $object_id, 'PERM_ADD_QUEUE' );
        !           309:        }
        !           310: 
        !           311:        function checkPermModifyOwnQueue( $object_type, $object_id ) {
        !           312:                return $this->get_permission( $object_type, $object_id, 'PERM_MODIFY_OWN_QUEUE' );
        !           313:        }
        !           314: 
        !           315:        function checkPermDeleteOwnQueue( $object_type, $object_id ) {
        !           316:                return $this->get_permission( $object_type, $object_id, 'PERM_DELETE_OWN_QUEUE' );
        !           317:        }
        !           318: 
        !           319:        function checkPermPrioLower5( $object_type, $object_id ) {
        !           320:                return $this->get_permission( $object_type, $object_id, 'PERM_PRIO_LOWER_5' );
        !           321:        }
        !           322: 
        !           323:        function checkPermModifyOtherQueue( $object_type, $object_id )
        !           324:  {
        !           325:                return $this->get_permission( $object_type, $object_id, 'PERM_MODIFY_OTHER_QUEUE' );
        !           326:        }
        !           327: 
        !           328:        function checkPermDeleteOtherQueue( $object_type, $object_id )
        !           329:  {
        !           330:                return $this->get_permission( $object_type, $object_id, 'PERM_DELETE_OTHER_QUEUE' );
        !           331:        }
        !           332: 
        !           333: ?>