Annotation of FreeBSD/tinderbox/webui/module/moduleUsers.php, revision 1.1.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: ?>