protected function set_current_user() { $user = null; $AnonymousUser = array('id' => 0, 'level' => 0, 'name' => "Anonymous", 'show_samples' => true, 'language' => '', 'secondary_languages' => '', 'pool_browse_mode' => 1, 'always_resize_images' => true, 'ip_addr' => $this->request()->remoteIp()); if (!current_user() && $this->session()->user_id) { $user = User::where(['id' => $this->session()->user_id])->first(); } else { if ($this->cookies()->login && $this->cookies()->pass_hash) { $user = User::authenticate_hash($this->cookies()->login, $this->cookies()->pass_hash); } elseif (isset($this->params()->login) && isset($this->params()->password_hash)) { $user = User::authenticate($this->params()->login, $this->params()->password_hash); } elseif (isset($this->params()->user['name']) && isset($this->params()->user['password'])) { $user = User::authenticate($this->params()->user['name'], $this->params()->user['password']); } $user && $user->updateAttribute('last_logged_in_at', date('Y-m-d H:i:s')); } if ($user) { if ($user->is_blocked() && $user->ban && $user->ban->expires_at < date('Y-m-d H:i:s')) { $user->updateAttribute('level', CONFIG()->starting_level); Ban::destroyAll("user_id = " . $user->id); } $this->session()->user_id = $user->id; } else { $user = new User(); $user->assignAttributes($AnonymousUser, ['without_protection' => true]); } User::set_current_user($user); $this->current_user = $user; # For convenient access in activerecord models $user->ip_addr = $this->request()->remoteIp(); Moebooru\Versioning\Versioning::init_history(); if (!current_user()->is_anonymous()) { current_user()->log($this->request()->remoteIp()); } }