2011-08-18 08:31:15 +08:00
< ? php
2011-08-19 03:57:27 +08:00
/* user_model . php
*
* This model implements user authentication and authorization
*
*/
2021-02-26 17:37:43 +08:00
2011-08-19 03:57:27 +08:00
2011-08-18 08:31:15 +08:00
// Uses 'phpass' from http://www.openwall.com/phpass/ to implement password hashing
2017-11-07 08:45:06 +08:00
// TODO migration away from this?
//require_once('application/third_party/PasswordHash.php');
2011-08-18 08:31:15 +08:00
class User_Model extends CI_Model {
2011-08-19 03:57:27 +08:00
// FUNCTION: object get($username)
2011-08-18 08:31:15 +08:00
// Retrieve a user
function get ( $username ) {
2019-10-06 02:35:55 +08:00
// Clean ID
$clean_username = $this -> security -> xss_clean ( $username );
$this -> db -> where ( 'user_name' , $clean_username );
2011-08-18 08:31:15 +08:00
$r = $this -> db -> get ( $this -> config -> item ( 'auth_table' ));
return $r ;
2021-02-26 17:37:43 +08:00
}
2011-08-18 08:31:15 +08:00
2011-08-19 03:57:27 +08:00
// FUNCTION: object get_by_id($id)
// Retrieve a user by user ID
2011-08-18 08:31:15 +08:00
function get_by_id ( $id ) {
2019-10-06 02:35:55 +08:00
// Clean ID
$clean_id = $this -> security -> xss_clean ( $id );
$this -> db -> where ( 'user_id' , $clean_id );
2011-08-18 08:31:15 +08:00
$r = $this -> db -> get ( $this -> config -> item ( 'auth_table' ));
return $r ;
}
2020-09-06 23:55:30 +08:00
// FUNCTION: object get_all_lotw_users
// Returns all users with lotw details
function get_all_lotw_users () {
$this -> db -> where ( 'user_lotw_name !=' , null );
2020-09-08 07:30:16 +08:00
$this -> db -> where ( 'user_lotw_name !=' , " " );
2020-09-06 23:55:30 +08:00
$r = $this -> db -> get ( $this -> config -> item ( 'auth_table' ));
2011-08-18 08:31:15 +08:00
return $r ;
}
2011-08-20 00:13:26 +08:00
// FUNCTION: object get_by_email($email)
// Retrieve a user by email address
function get_by_email ( $email ) {
2019-10-06 02:35:55 +08:00
$clean_email = $this -> security -> xss_clean ( $email );
$this -> db -> where ( 'user_email' , $clean_email );
2011-08-20 00:13:26 +08:00
$r = $this -> db -> get ( $this -> config -> item ( 'auth_table' ));
return $r ;
}
2022-01-18 23:29:22 +08:00
/*
* Function : check_email_address
2023-08-02 14:34:12 +08:00
*
2022-01-18 23:29:22 +08:00
* Checks if an email address is already in use
2023-08-02 14:34:12 +08:00
*
2022-01-18 23:29:22 +08:00
* @ param string $email
*/
function check_email_address ( $email ) {
$clean_email = $this -> security -> xss_clean ( $email );
$this -> db -> where ( 'user_email' , $clean_email );
$query = $this -> db -> get ( $this -> config -> item ( 'auth_table' ));
2023-08-02 14:34:12 +08:00
2022-01-18 23:29:22 +08:00
if ( $query -> num_rows () > 0 ) {
return true ;
} else {
return false ;
}
}
2023-04-25 20:00:30 +08:00
function get_email_address ( $station_id ) {
$this -> db -> where ( 'station_id' , $station_id );
$this -> db -> join ( 'station_profile' , 'station_profile.user_id = ' . $this -> config -> item ( 'auth_table' ) . '.user_id' );
2022-11-16 01:29:33 +08:00
$query = $this -> db -> get ( $this -> config -> item ( 'auth_table' ));
2023-08-02 14:34:12 +08:00
2022-11-16 01:29:33 +08:00
$ret = $query -> row ();
return $ret -> user_email ;
}
2011-08-19 03:57:27 +08:00
// FUNCTION: bool exists($username)
// Check if a user exists (by username)
2011-08-18 08:31:15 +08:00
function exists ( $username ) {
2019-10-06 02:35:55 +08:00
$clean_username = $this -> security -> xss_clean ( $username );
if ( $this -> get ( $clean_username ) -> num_rows () == 0 ) {
2011-08-18 08:31:15 +08:00
return 0 ;
} else {
return 1 ;
}
}
2011-08-20 00:13:26 +08:00
// FUNCTION: bool exists_by_id($id)
// Check if a user exists (by user ID)
function exists_by_id ( $id ) {
2019-10-06 02:35:55 +08:00
$clean_id = $this -> security -> xss_clean ( $id );
if ( $this -> get_by_id ( $clean_id ) -> num_rows () == 0 ) {
2011-08-20 00:13:26 +08:00
return 0 ;
} else {
return 1 ;
}
}
// FUNCTION: bool exists_by_email($email)
// Check if a user exists (by email address)
function exists_by_email ( $email ) {
2017-12-01 10:01:11 +08:00
if ( $this -> get_by_email ( $email ) -> num_rows () == 0 ) {
2011-08-20 00:13:26 +08:00
return 0 ;
} else {
return 1 ;
}
}
2011-08-19 03:57:27 +08:00
// FUNCTION: bool add($username, $password, $email, $type)
// Add a user
2021-05-07 14:03:25 +08:00
function add ( $username , $password , $email , $type , $firstname , $lastname , $callsign , $locator , $timezone ,
2022-10-19 22:27:26 +08:00
$measurement , $user_date_format , $user_stylesheet , $user_qth_lookup , $user_sota_lookup , $user_wwff_lookup ,
2023-05-02 03:14:30 +08:00
$user_pota_lookup , $user_show_notes , $user_column1 , $user_column2 , $user_column3 , $user_column4 , $user_column5 ,
2023-07-07 22:04:19 +08:00
$user_show_profile_image , $user_previous_qsl_type , $user_amsat_status_upload , $user_mastodon_url ,
2023-08-02 14:34:12 +08:00
$user_gridmap_default_band , $user_gridmap_confirmation , $language ) {
2011-08-20 00:13:26 +08:00
// Check that the user isn't already used
2011-08-18 08:31:15 +08:00
if ( ! $this -> exists ( $username )) {
$data = array (
2019-10-06 05:16:58 +08:00
'user_name' => xss_clean ( $username ),
2011-08-18 08:31:15 +08:00
'user_password' => $this -> _hash ( $password ),
2019-10-06 05:16:58 +08:00
'user_email' => xss_clean ( $email ),
'user_type' => xss_clean ( $type ),
'user_firstname' => xss_clean ( $firstname ),
'user_lastname' => xss_clean ( $lastname ),
'user_callsign' => xss_clean ( $callsign ),
'user_locator' => xss_clean ( $locator ),
2020-09-17 03:54:26 +08:00
'user_timezone' => xss_clean ( $timezone ),
'user_measurement_base' => xss_clean ( $measurement ),
'user_date_format' => xss_clean ( $user_date_format ),
2020-09-23 16:59:49 +08:00
'user_stylesheet' => xss_clean ( $user_stylesheet ),
2022-10-19 22:27:26 +08:00
'user_qth_lookup' => xss_clean ( $user_qth_lookup ),
2021-02-26 17:37:43 +08:00
'user_sota_lookup' => xss_clean ( $user_sota_lookup ),
2022-10-19 20:52:43 +08:00
'user_wwff_lookup' => xss_clean ( $user_wwff_lookup ),
2023-05-02 03:14:30 +08:00
'user_pota_lookup' => xss_clean ( $user_pota_lookup ),
2021-03-21 04:19:07 +08:00
'user_show_notes' => xss_clean ( $user_show_notes ),
2021-05-05 23:52:42 +08:00
'user_column1' => xss_clean ( $user_column1 ),
'user_column2' => xss_clean ( $user_column2 ),
'user_column3' => xss_clean ( $user_column3 ),
'user_column4' => xss_clean ( $user_column4 ),
2021-05-07 14:03:25 +08:00
'user_column5' => xss_clean ( $user_column5 ),
2022-07-03 17:39:05 +08:00
'user_show_profile_image' => xss_clean ( $user_show_profile_image ),
2022-11-25 07:22:31 +08:00
'user_previous_qsl_type' => xss_clean ( $user_previous_qsl_type ),
2023-01-28 00:24:48 +08:00
'user_amsat_status_upload' => xss_clean ( $user_amsat_status_upload ),
2023-07-06 16:17:20 +08:00
'user_mastodon_url' => xss_clean ( $user_mastodon_url ),
2023-07-07 22:04:19 +08:00
'user_gridmap_default_band' => xss_clean ( $user_gridmap_default_band ),
'user_gridmap_confirmation' => xss_clean ( $user_gridmap_confirmation ),
2023-08-02 14:34:12 +08:00
'language' => xss_clean ( $language ),
2011-08-18 08:31:15 +08:00
);
2011-08-20 00:13:26 +08:00
// Check the password is valid
if ( $data [ 'user_password' ] == EPASSWORDINVALID ) {
return EPASSWORDINVALID ;
}
// Check the email address isn't in use
if ( $this -> exists_by_email ( $email )) {
return EEMAILEXISTS ;
}
2022-09-06 18:32:54 +08:00
// Add user and insert bandsettings for user
2011-08-18 09:27:53 +08:00
$this -> db -> insert ( $this -> config -> item ( 'auth_table' ), $data );
2022-09-06 18:32:54 +08:00
$insert_id = $this -> db -> insert_id ();
2022-10-06 04:13:12 +08:00
$this -> db -> query ( " insert into bandxuser (bandid, userid, active, cq, dok, dxcc, iota, pota, sig, sota, uscounties, was, wwff, vucc) select bands.id, " . $insert_id . " , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 from bands; " );
2023-08-02 19:05:44 +08:00
$this -> db -> query ( " insert into paper_types (user_id,paper_name,metric,width,orientation,height) SELECT " . $insert_id . " , paper_name, metric, width, orientation,height FROM paper_types where id<4; " );
2011-08-20 00:13:26 +08:00
return OK ;
2011-08-18 08:31:15 +08:00
} else {
2011-08-20 00:13:26 +08:00
return EUSERNAMEEXISTS ;
2011-08-18 08:31:15 +08:00
}
}
2011-08-20 00:13:26 +08:00
// FUNCTION: bool edit()
2011-08-19 03:57:27 +08:00
// Edit a user
2011-08-20 03:33:37 +08:00
function edit ( $fields ) {
// Check user privileges
if (( $this -> session -> userdata ( 'user_type' ) == 99 ) || ( $this -> session -> userdata ( 'user_id' ) == $fields [ 'id' ])) {
if ( $this -> exists_by_id ( $fields [ 'id' ])) {
$data = array (
2019-10-06 04:57:44 +08:00
'user_name' => xss_clean ( $fields [ 'user_name' ]),
'user_email' => xss_clean ( $fields [ 'user_email' ]),
'user_callsign' => xss_clean ( $fields [ 'user_callsign' ]),
'user_locator' => xss_clean ( $fields [ 'user_locator' ]),
'user_firstname' => xss_clean ( $fields [ 'user_firstname' ]),
'user_lastname' => xss_clean ( $fields [ 'user_lastname' ]),
'user_timezone' => xss_clean ( $fields [ 'user_timezone' ]),
'user_lotw_name' => xss_clean ( $fields [ 'user_lotw_name' ]),
'user_eqsl_name' => xss_clean ( $fields [ 'user_eqsl_name' ]),
'user_clublog_name' => xss_clean ( $fields [ 'user_clublog_name' ]),
2020-09-14 18:29:02 +08:00
'user_measurement_base' => xss_clean ( $fields [ 'user_measurement_base' ]),
2020-09-16 05:04:47 +08:00
'user_date_format' => xss_clean ( $fields [ 'user_date_format' ]),
2020-09-23 16:59:49 +08:00
'user_stylesheet' => xss_clean ( $fields [ 'user_stylesheet' ]),
2022-10-19 22:27:26 +08:00
'user_qth_lookup' => xss_clean ( $fields [ 'user_qth_lookup' ]),
2021-02-26 17:37:43 +08:00
'user_sota_lookup' => xss_clean ( $fields [ 'user_sota_lookup' ]),
2022-10-19 20:52:43 +08:00
'user_wwff_lookup' => xss_clean ( $fields [ 'user_wwff_lookup' ]),
2023-05-02 03:14:30 +08:00
'user_pota_lookup' => xss_clean ( $fields [ 'user_pota_lookup' ]),
2021-03-21 04:19:07 +08:00
'user_show_notes' => xss_clean ( $fields [ 'user_show_notes' ]),
2021-05-05 23:52:42 +08:00
'user_column1' => xss_clean ( $fields [ 'user_column1' ]),
'user_column2' => xss_clean ( $fields [ 'user_column2' ]),
'user_column3' => xss_clean ( $fields [ 'user_column3' ]),
'user_column4' => xss_clean ( $fields [ 'user_column4' ]),
2021-05-07 14:03:25 +08:00
'user_column5' => xss_clean ( $fields [ 'user_column5' ]),
2022-07-03 17:39:05 +08:00
'user_show_profile_image' => xss_clean ( $fields [ 'user_show_profile_image' ]),
2022-11-25 07:22:31 +08:00
'user_previous_qsl_type' => xss_clean ( $fields [ 'user_previous_qsl_type' ]),
2023-01-28 00:24:48 +08:00
'user_amsat_status_upload' => xss_clean ( $fields [ 'user_amsat_status_upload' ]),
2023-07-06 16:17:20 +08:00
'user_mastodon_url' => xss_clean ( $fields [ 'user_mastodon_url' ]),
2023-07-07 22:04:19 +08:00
'user_gridmap_default_band' => xss_clean ( $fields [ 'user_gridmap_default_band' ]),
'user_gridmap_confirmation' => ( isset ( $fields [ 'user_gridmap_confirmation_qsl' ]) ? 'Q' : '' ) . ( isset ( $fields [ 'user_gridmap_confirmation_lotw' ]) ? 'L' : '' ) . ( isset ( $fields [ 'user_gridmap_confirmation_eqsl' ]) ? 'E' : '' ),
2023-08-02 14:34:12 +08:00
'language' => xss_clean ( $fields [ 'language' ]),
2011-08-20 03:33:37 +08:00
);
2021-02-26 17:37:43 +08:00
2011-08-20 03:33:37 +08:00
// Check to see if the user is allowed to change user levels
if ( $this -> session -> userdata ( 'user_type' ) == 99 ) {
$data [ 'user_type' ] = $fields [ 'user_type' ];
}
2021-02-26 17:37:43 +08:00
2011-08-20 03:33:37 +08:00
// Check to see if username is used already
if ( $this -> exists ( $fields [ 'user_name' ]) && $this -> get ( $fields [ 'user_name' ]) -> row () -> user_id != $fields [ 'id' ]) {
return EUSERNAMEEXISTS ;
}
// Check to see if email address is used already
if ( $this -> exists_by_email ( $fields [ 'user_email' ]) && $this -> get_by_email ( $fields [ 'user_email' ]) -> row () -> user_id != $fields [ 'id' ]) {
return EEMAILEXISTS ;
}
2021-02-26 17:37:43 +08:00
2011-08-20 03:33:37 +08:00
// Hash password
if ( $fields [ 'user_password' ] != NULL )
{
$data [ 'user_password' ] = $this -> _hash ( $fields [ 'user_password' ]);
if ( $data [ 'user_password' ] == EPASSWORDINVALID ) {
return EPASSWORDINVALID ;
}
2011-08-20 00:13:26 +08:00
}
2013-08-17 21:54:16 +08:00
if ( $fields [ 'user_lotw_password' ] != NULL )
{
$data [ 'user_lotw_password' ] = $fields [ 'user_lotw_password' ];
}
2019-06-19 22:24:07 +08:00
if ( $fields [ 'user_clublog_password' ] != NULL )
{
$data [ 'user_clublog_password' ] = $fields [ 'user_clublog_password' ];
}
2021-02-26 17:37:43 +08:00
2013-08-17 22:08:26 +08:00
if ( $fields [ 'user_eqsl_password' ] != NULL )
{
$data [ 'user_eqsl_password' ] = $fields [ 'user_eqsl_password' ];
}
2021-02-26 17:37:43 +08:00
2011-08-20 03:33:37 +08:00
// Update the user
$this -> db -> where ( 'user_id' , $fields [ 'id' ]);
$this -> db -> update ( $this -> config -> item ( 'auth_table' ), $data );
return OK ;
} else {
return ENOSUCHUSER ;
}
2011-08-20 00:13:26 +08:00
} else {
2011-08-20 03:33:37 +08:00
return EFORBIDDEN ;
2021-02-26 17:37:43 +08:00
}
2011-08-20 00:13:26 +08:00
}
// FUNCTION: bool delete()
// Deletes a user
function delete ( $user_id ) {
2011-08-18 08:31:15 +08:00
2011-08-20 00:13:26 +08:00
if ( $this -> exists_by_id ( $user_id )) {
$this -> db -> query ( " DELETE FROM " . $this -> config -> item ( 'auth_table' ) . " WHERE user_id = ' " . $user_id . " ' " );
2011-08-18 08:31:15 +08:00
2011-08-20 00:13:26 +08:00
return 1 ;
} else {
return 0 ;
}
2011-08-18 08:31:15 +08:00
}
2011-08-19 03:57:27 +08:00
// FUNCTION: bool login()
// Validates a username/password combination
// This is really just a wrapper around User_Model::authenticate
2011-08-18 08:31:15 +08:00
function login () {
2017-11-07 08:45:06 +08:00
2019-10-06 02:35:55 +08:00
$username = $this -> input -> post ( 'user_name' , true );
$password = $this -> input -> post ( 'user_password' , true );
2011-08-18 08:31:15 +08:00
return $this -> authenticate ( $username , $password );
}
2011-08-19 03:57:27 +08:00
// FUNCTION: void clear_session()
// Clears a user's login session
// Nothing is returned - it can be assumed that if this is called, the user's
// login session *will* be cleared, no matter what state it is in
2011-08-18 08:31:15 +08:00
function clear_session () {
2021-02-26 17:37:43 +08:00
2017-11-07 08:45:06 +08:00
$this -> session -> sess_destroy ();
2011-08-18 08:31:15 +08:00
}
2021-02-26 17:37:43 +08:00
2011-08-19 03:57:27 +08:00
// FUNCTION: void update_session()
// Updates a user's login session after they've logged in
// TODO: This should return bool TRUE/FALSE or 0/1
2011-08-18 08:31:15 +08:00
function update_session ( $id ) {
2021-02-26 17:37:43 +08:00
2011-08-18 08:31:15 +08:00
$u = $this -> get_by_id ( $id );
$userdata = array (
2018-12-01 03:00:09 +08:00
'user_id' => $u -> row () -> user_id ,
'user_name' => $u -> row () -> user_name ,
'user_type' => $u -> row () -> user_type ,
'user_callsign' => $u -> row () -> user_callsign ,
'user_locator' => $u -> row () -> user_locator ,
'user_lotw_name' => $u -> row () -> user_lotw_name ,
'user_eqsl_name' => $u -> row () -> user_eqsl_name ,
'user_eqsl_qth_nickname' => $u -> row () -> user_eqsl_qth_nickname ,
2019-06-25 19:46:13 +08:00
'user_hash' => $this -> _hash ( $u -> row () -> user_id . " - " . $u -> row () -> user_type ),
'radio' => isset ( $_COOKIE [ " radio " ]) ? $_COOKIE [ " radio " ] : " " ,
2020-09-14 18:29:02 +08:00
'station_profile_id' => isset ( $_COOKIE [ " station_profile_id " ]) ? $_COOKIE [ " station_profile_id " ] : " " ,
'user_measurement_base' => $u -> row () -> user_measurement_base ,
2020-09-16 05:04:47 +08:00
'user_date_format' => $u -> row () -> user_date_format ,
2020-09-23 16:59:49 +08:00
'user_stylesheet' => $u -> row () -> user_stylesheet ,
2022-10-19 22:27:26 +08:00
'user_qth_lookup' => isset ( $u -> row () -> user_qth_lookup ) ? $u -> row () -> user_qth_lookup : 0 ,
2021-07-20 21:07:55 +08:00
'user_sota_lookup' => isset ( $u -> row () -> user_sota_lookup ) ? $u -> row () -> user_sota_lookup : 0 ,
2022-10-19 20:52:43 +08:00
'user_wwff_lookup' => isset ( $u -> row () -> user_wwff_lookup ) ? $u -> row () -> user_wwff_lookup : 0 ,
2023-05-02 03:14:30 +08:00
'user_pota_lookup' => isset ( $u -> row () -> user_pota_lookup ) ? $u -> row () -> user_pota_lookup : 0 ,
2021-07-20 21:07:55 +08:00
'user_show_notes' => isset ( $u -> row () -> user_show_notes ) ? $u -> row () -> user_show_notes : 1 ,
2022-07-03 17:39:05 +08:00
'user_show_profile_image' => isset ( $u -> row () -> user_show_profile_image ) ? $u -> row () -> user_show_profile_image : 0 ,
2021-07-20 21:07:55 +08:00
'user_column1' => isset ( $u -> row () -> user_column1 ) ? $u -> row () -> user_column1 : 'Mode' ,
'user_column2' => isset ( $u -> row () -> user_column2 ) ? $u -> row () -> user_column2 : 'RSTS' ,
'user_column3' => isset ( $u -> row () -> user_column3 ) ? $u -> row () -> user_column3 : 'RSTR' ,
'user_column4' => isset ( $u -> row () -> user_column4 ) ? $u -> row () -> user_column4 : 'Band' ,
'user_column5' => isset ( $u -> row () -> user_column5 ) ? $u -> row () -> user_column5 : 'Country' ,
2022-11-25 07:22:31 +08:00
'user_previous_qsl_type' => isset ( $u -> row () -> user_previous_qsl_type ) ? $u -> row () -> user_previous_qsl_type : 0 ,
2023-01-28 00:24:48 +08:00
'user_amsat_status_upload' => isset ( $u -> row () -> user_amsat_status_upload ) ? $u -> row () -> user_amsat_status_upload : 0 ,
2023-07-06 16:17:20 +08:00
'user_mastodon_url' => $u -> row () -> user_mastodon_url ,
2023-07-07 22:04:19 +08:00
'user_gridmap_default_band' => $u -> row () -> user_gridmap_default_band ,
'user_gridmap_confirmation' => $u -> row () -> user_gridmap_confirmation ,
2021-09-08 01:07:48 +08:00
'active_station_logbook' => $u -> row () -> active_station_logbook ,
2023-08-02 14:34:12 +08:00
'language' => isset ( $u -> row () -> language ) ? $u -> row () -> language : 'english' ,
2011-08-18 08:31:15 +08:00
);
$this -> session -> set_userdata ( $userdata );
}
2011-08-19 03:57:27 +08:00
// FUNCTION: bool validate_session()
// Validate a user's login session
// If the user's session is corrupted in any way, it will clear the session
2011-08-18 08:31:15 +08:00
function validate_session () {
if ( $this -> session -> userdata ( 'user_id' ))
{
$user_id = $this -> session -> userdata ( 'user_id' );
$user_type = $this -> session -> userdata ( 'user_type' );
$user_hash = $this -> session -> userdata ( 'user_hash' );
if ( $this -> _auth ( $user_id . " - " . $user_type , $user_hash )) {
2011-08-20 01:24:56 +08:00
// Freshen the session
$this -> update_session ( $user_id );
2011-08-18 08:31:15 +08:00
return 1 ;
} else {
$this -> clear_session ();
return 0 ;
}
} else {
return 0 ;
}
}
2011-08-19 03:57:27 +08:00
// FUNCTION: bool authenticate($username, $password)
// Authenticate a user against the users table
2011-08-18 08:31:15 +08:00
function authenticate ( $username , $password ) {
$u = $this -> get ( $username );
2017-11-07 08:45:06 +08:00
if ( $u -> num_rows () != 0 )
2011-08-18 08:31:15 +08:00
{
if ( $this -> _auth ( $password , $u -> row () -> user_password )) {
return 1 ;
}
}
return 0 ;
}
2011-08-19 03:57:27 +08:00
// FUNCTION: bool authorize($level)
// Checks a user's level of access against the given $level
2011-08-18 08:31:15 +08:00
function authorize ( $level ) {
$u = $this -> get_by_id ( $this -> session -> userdata ( 'user_id' ));
2011-08-20 01:24:56 +08:00
$l = $this -> config -> item ( 'auth_mode' );
// Check to see if the minimum level of access is higher than
// the user's own level. If it is, use that.
if ( $this -> config -> item ( 'auth_mode' ) > $level ) {
$level = $this -> config -> item ( 'auth_mode' );
}
if (( $this -> validate_session ()) && ( $u -> row () -> user_type >= $level ) || $this -> config -> item ( 'use_auth' ) == FALSE || $level == 0 ) {
2011-08-18 08:31:15 +08:00
return 1 ;
} else {
return 0 ;
}
}
2011-08-19 03:57:27 +08:00
// FUNCTION: bool set($username, $data)
// Updates a user's record in the database
// TODO: This returns TRUE/1 no matter what at the moment - should
// TODO: return TRUE/FALSE or 0/1 depending on success/failure
2011-08-18 08:31:15 +08:00
function set ( $username , $data ) {
$this -> db -> where ( 'user_name' , $username );
$this -> db -> update ( $this -> config -> item ( 'auth_table' , $data ));
return 1 ;
}
2011-08-19 03:57:27 +08:00
// FUNCTION: object users()
// Returns a list of users
2011-08-18 08:31:15 +08:00
function users () {
$r = $this -> db -> get ( $this -> config -> item ( 'auth_table' ));
return $r ;
}
2011-09-28 06:47:25 +08:00
// FUNCTION: array timezones()
// Returns a list of timezones
function timezones () {
2021-09-29 03:34:32 +08:00
$r = $this -> db -> query ( 'SELECT id, name FROM timezones ORDER BY `offset`' );
2011-09-28 06:47:25 +08:00
$ts = array ();
foreach ( $r -> result_array () as $t ) {
$ts [ $t [ 'id' ]] = $t [ 'name' ];
}
return $ts ;
}
2021-08-09 19:13:41 +08:00
// FUNCTION: array getThemes()
// Returns a list of themes
function getThemes () {
$result = $this -> db -> query ( 'SELECT * FROM themes order by name' );
return $result -> result ();
}
2022-01-18 23:29:22 +08:00
/*
* FUNCTION : set_password_reset_code
*
* Stores generated password reset code in the database and sets the date to exactly
* when the sql query runs .
2023-08-02 14:34:12 +08:00
*
2022-01-18 23:29:22 +08:00
* @ param string $user_email
* @ return string $reset_code
*/
function set_password_reset_code ( $user_email , $reset_code ) {
$data = array (
'reset_password_code' => $reset_code ,
'reset_password_date' => date ( 'Y-m-d H:i:s' )
);
2023-08-02 14:34:12 +08:00
2022-01-18 23:29:22 +08:00
$this -> db -> where ( 'user_email' , $user_email );
$this -> db -> update ( 'users' , $data );
}
2022-01-19 00:14:22 +08:00
/*
* FUNCTION : reset_password
*
* Sets new password for users account where the reset code matches then clears the password reset code and password reset date .
2023-08-02 14:34:12 +08:00
*
2022-01-19 00:14:22 +08:00
* @ param string $password
* @ return string $reset_code
*/
function reset_password ( $password , $reset_code ) {
$data = array (
'user_password' => $this -> _hash ( $password ),
'reset_password_code' => NULL ,
'reset_password_date' => NULL
);
2023-08-02 14:34:12 +08:00
2022-01-19 00:14:22 +08:00
$this -> db -> where ( 'reset_password_code' , $reset_code );
$this -> db -> update ( 'users' , $data );
}
2011-08-19 03:57:27 +08:00
// FUNCTION: bool _auth($password, $hash)
// Checks a password against the stored hash
2011-08-18 08:31:15 +08:00
private function _auth ( $password , $hash ) {
2017-11-07 08:45:06 +08:00
if ( password_verify ( $password , $hash )) {
2011-08-18 08:31:15 +08:00
return 1 ;
} else {
return 0 ;
}
}
2011-08-19 03:57:27 +08:00
// FUNCTION: string _hash($password)
// Returns a hashed version of the supplied $password
// Will return '0' in the event of problems with the
// hashing function
2011-08-18 08:31:15 +08:00
private function _hash ( $password ) {
2021-02-26 17:37:43 +08:00
$hash = password_hash ( $password , PASSWORD_DEFAULT );
2011-08-18 08:31:15 +08:00
if ( strlen ( $hash ) < 20 ) {
2011-08-20 00:13:26 +08:00
return EPASSWORDINVALID ;
2011-08-18 08:31:15 +08:00
} else {
return $hash ;
}
}
2021-02-26 17:37:43 +08:00
2011-08-18 08:31:15 +08:00
}
?>