add logging in with your owned player names

This commit is contained in:
printempw 2016-08-16 22:52:00 +08:00
parent 0b17fa4799
commit 3a9d1fc665
25 changed files with 175 additions and 206 deletions

View File

@ -37,7 +37,7 @@ class AdminController extends BaseController
public function update() public function update()
{ {
if (\Utils::getValue('action', $_GET) == "check") { if (Utils::getValue('action', $_GET) == "check") {
$updater = new \Updater(\App::getVersion()); $updater = new \Updater(\App::getVersion());
if ($updater->newVersionAvailable()) { if ($updater->newVersionAvailable()) {
View::json([ View::json([
@ -59,18 +59,15 @@ class AdminController extends BaseController
if ($filter == "") { if ($filter == "") {
$users = UserModel::orderBy('uid'); $users = UserModel::orderBy('uid');
$total_pages = ceil($users->count() / 30); } elseif ($filter == "email") {
$users = $users->skip(($page - 1) * 30)->take(30)->get();
} else if ($filter == "email") {
$users = UserModel::like('email', $q)->orderBy('uid'); $users = UserModel::like('email', $q)->orderBy('uid');
$total_pages = ceil($users->count() / 30); } elseif ($filter == "nickname") {
$users = $users->skip(($page - 1) * 30)->take(30)->get();
} else if ($filter == "nickname") {
$users = UserModel::like('nickname', $q)->orderBy('uid'); $users = UserModel::like('nickname', $q)->orderBy('uid');
$total_pages = ceil($users->count() / 30);
$users = $users->skip(($page - 1) * 30)->take(30)->get();
} }
$total_pages = ceil($users->count() / 30);
$users = $users->skip(($page - 1) * 30)->take(30)->get();
echo View::make('admin.users')->with('users', $users) echo View::make('admin.users')->with('users', $users)
->with('filter', $filter) ->with('filter', $filter)
->with('q', $q) ->with('q', $q)
@ -89,18 +86,15 @@ class AdminController extends BaseController
if ($filter == "") { if ($filter == "") {
$players = PlayerModel::orderBy('uid'); $players = PlayerModel::orderBy('uid');
$total_pages = ceil($players->count() / 30); } elseif ($filter == "player_name") {
$players = $players->skip(($page - 1) * 30)->take(30)->get();
} else if ($filter == "player_name") {
$players = PlayerModel::like('player_name', $q)->orderBy('uid'); $players = PlayerModel::like('player_name', $q)->orderBy('uid');
$total_pages = ceil($players->count() / 30); } elseif ($filter == "uid") {
$players = $players->skip(($page - 1) * 30)->take(30)->get();
} else if ($filter == "uid") {
$players = PlayerModel::where('uid', $q)->orderBy('uid'); $players = PlayerModel::where('uid', $q)->orderBy('uid');
$total_pages = ceil($players->count() / 30);
$players = $players->skip(($page - 1) * 30)->take(30)->get();
} }
$total_pages = ceil($players->count() / 30);
$players = $players->skip(($page - 1) * 30)->take(30)->get();
echo View::make('admin.players')->with('players', $players) echo View::make('admin.players')->with('players', $players)
->with('filter', $filter) ->with('filter', $filter)
->with('q', $q) ->with('q', $q)
@ -125,9 +119,9 @@ class AdminController extends BaseController
View::json('修改配色成功', 0); View::json('修改配色成功', 0);
} }
$user = new User(Utils::getValue('uid', $_POST)); $user = new User(Utils::getValue('uid', $_POST));
// current user
$current_user = new User(0, ['email' => $_SESSION['email']]); $cur_user = new User($_SESSION['uid']);
if (!$user->is_registered) if (!$user->is_registered)
throw new E('用户不存在', 1); throw new E('用户不存在', 1);
@ -142,7 +136,7 @@ class AdminController extends BaseController
if ($user->setEmail($_POST['email'])) if ($user->setEmail($_POST['email']))
View::json('邮箱修改成功', 0); View::json('邮箱修改成功', 0);
} if ($action == "nickname") { } elseif ($action == "nickname") {
Validate::checkPost(['nickname']); Validate::checkPost(['nickname']);
if (Utils::convertString($_POST['nickname']) != $_POST['nickname']) if (Utils::convertString($_POST['nickname']) != $_POST['nickname'])
@ -151,7 +145,7 @@ class AdminController extends BaseController
if ($user->setNickName($_POST['nickname'])) if ($user->setNickName($_POST['nickname']))
View::json('昵称已成功设置为 '.$_POST['nickname'], 0); View::json('昵称已成功设置为 '.$_POST['nickname'], 0);
} else if ($action == "password") { } elseif ($action == "password") {
Validate::checkPost(['password']); Validate::checkPost(['password']);
if (\Validate::password($_POST['password'])) { if (\Validate::password($_POST['password'])) {
@ -159,15 +153,15 @@ class AdminController extends BaseController
View::json('密码修改成功', 0); View::json('密码修改成功', 0);
} }
} else if ($action == "score") { } elseif ($action == "score") {
Validate::checkPost(['score']); Validate::checkPost(['score']);
if ($user->setScore($_POST['score'])) if ($user->setScore($_POST['score']))
View::json('积分修改成功', 0); View::json('积分修改成功', 0);
} else if ($action == "ban") { } elseif ($action == "ban") {
if ($user->getPermission() == "1") { if ($user->getPermission() == "1") {
if ($current_user->getPermission() != "2") if ($cur_user->getPermission() != "2")
View::json('非超级管理员无法封禁普通管理员'); View::json('非超级管理员无法封禁普通管理员');
} elseif ($user->getPermission() == "2") { } elseif ($user->getPermission() == "2") {
View::json('超级管理员无法被封禁'); View::json('超级管理员无法被封禁');
@ -183,8 +177,8 @@ class AdminController extends BaseController
]); ]);
} }
} else if ($action == "admin") { } elseif ($action == "admin") {
if ($current_user->getPermission() != "2") if ($cur_user->getPermission() != "2")
View::json('非超级管理员无法进行此操作'); View::json('非超级管理员无法进行此操作');
if ($user->getPermission() == "2") if ($user->getPermission() == "2")
@ -200,12 +194,12 @@ class AdminController extends BaseController
]); ]);
} }
} else if ($action == "delete") { } elseif ($action == "delete") {
if ($user->delete()) if ($user->delete())
View::json('账号已被成功删除', 0); View::json('账号已被成功删除', 0);
} else { } else {
throw new E('Illegal parameters', 1); throw new E('非法参数', 1);
} }
} }
@ -258,7 +252,7 @@ class AdminController extends BaseController
if (PlayerModel::where('pid', $_POST['pid'])->delete()) if (PlayerModel::where('pid', $_POST['pid'])->delete())
View::json('角色已被成功删除', 0); View::json('角色已被成功删除', 0);
} else { } else {
throw new E('Illegal parameters', 1); throw new E('非法参数', 1);
} }
} }

View File

@ -22,9 +22,9 @@ class AuthController extends BaseController
public function handleLogin() public function handleLogin()
{ {
// instantiate user // instantiate user
$user = ($_SESSION['auth_type'] = 'email') ? $user = ($_SESSION['auth_type'] == 'email') ?
new User(0, ['email' => $_POST['email']]) : new User(null, ['email' => $_POST['email']]) :
new User(0, ['username' => $_POST['username']]); new User(null, ['username' => $_POST['username']]);
if (Utils::getValue('login_fails', $_SESSION) > 3) { if (Utils::getValue('login_fails', $_SESSION) > 3) {
if (strtolower(Utils::getValue('captcha', $_POST)) != strtolower($_SESSION['phrase'])) if (strtolower(Utils::getValue('captcha', $_POST)) != strtolower($_SESSION['phrase']))
@ -40,8 +40,10 @@ class AuthController extends BaseController
$_SESSION['uid'] = $user->uid; $_SESSION['uid'] = $user->uid;
$_SESSION['token'] = $user->getToken(); $_SESSION['token'] = $user->getToken();
setcookie('uid', $user->uid, time()+3600, '/'); $time = $_POST['keep'] == true ? 86400 : 3600;
setcookie('token', $user->getToken(), time()+3600, '/');
setcookie('uid', $user->uid, time()+$time, '/');
setcookie('token', $user->getToken(), time()+$time, '/');
View::json([ View::json([
'errno' => 0, 'errno' => 0,
@ -64,11 +66,13 @@ class AuthController extends BaseController
public function logout() public function logout()
{ {
if (isset($_SESSION['token'])) { if (isset($_SESSION['token'])) {
session_destroy(); $user = new User($_SESSION['uid']);
setcookie('uid', $user->uid, time()-3600, '/'); setcookie('uid', $user->uid, time()-3600, '/');
setcookie('token', $user->getToken(), time()-3600, '/'); setcookie('token', $user->getToken(), time()-3600, '/');
session_destroy();
View::json('登出成功~', 0); View::json('登出成功~', 0);
} else { } else {
throw new E('并没有有效的 session', 1); throw new E('并没有有效的 session', 1);
@ -89,7 +93,7 @@ class AuthController extends BaseController
if (strtolower(Utils::getValue('captcha', $_POST)) != strtolower($_SESSION['phrase'])) if (strtolower(Utils::getValue('captcha', $_POST)) != strtolower($_SESSION['phrase']))
View::json('验证码填写错误', 1); View::json('验证码填写错误', 1);
$user = new User(0, ['email' => $_POST['email']]); $user = new User(null, ['email' => $_POST['email']]);
if (!$user->is_registered) { if (!$user->is_registered) {
if (Option::get('user_can_register') == 1) { if (Option::get('user_can_register') == 1) {
@ -143,7 +147,7 @@ class AuthController extends BaseController
if (isset($_SESSION['last_mail_time']) && (time() - $_SESSION['last_mail_time']) < 60) if (isset($_SESSION['last_mail_time']) && (time() - $_SESSION['last_mail_time']) < 60)
View::json('你邮件发送得太频繁啦,过 60 秒后再点发送吧', 1); View::json('你邮件发送得太频繁啦,过 60 秒后再点发送吧', 1);
$user = new User(0, ['email' => $_POST['email']]); $user = new User(null, ['email' => $_POST['email']]);
if (!$user->is_registered) if (!$user->is_registered)
View::json('该邮箱尚未注册', 1); View::json('该邮箱尚未注册', 1);

View File

@ -12,11 +12,11 @@ use Option;
class ClosetController extends BaseController class ClosetController extends BaseController
{ {
public $closet; private $closet;
function __construct() public function __construct()
{ {
$this->closet = new Closet((new User(0, ['email' => $_SESSION['email']]))->uid); $this->closet = new Closet($_SESSION['uid']);
} }
public function index() public function index()
@ -33,7 +33,7 @@ class ClosetController extends BaseController
->with('page', $page) ->with('page', $page)
->with('category', $category) ->with('category', $category)
->with('total_pages', $total_pages) ->with('total_pages', $total_pages)
->with('user', (new User(0, ['email' => $_SESSION['email']]))) ->with('user', (new User($_SESSION['uid'])))
->render(); ->render();
} }
@ -58,7 +58,7 @@ class ClosetController extends BaseController
public function remove() public function remove()
{ {
if (!is_numeric(\Utils::getValue('tid', $_POST))) if (!is_numeric(\Utils::getValue('tid', $_POST)))
throw new E('Invalid parameters.', 1); throw new E('非法参数', 1);
if ($this->closet->remove($_POST['tid'])) { if ($this->closet->remove($_POST['tid'])) {
$t = Texture::find($_POST['tid']); $t = Texture::find($_POST['tid']);

View File

@ -9,20 +9,20 @@ class HomeController extends BaseController
public function index() public function index()
{ {
if (isset($_COOKIE['email']) && isset($_COOKIE['token'])) { if (isset($_COOKIE['uid']) && isset($_COOKIE['token'])) {
$user = new User($_COOKIE['email']); $user = new User($_COOKIE['uid']);
if ($_COOKIE['token'] == $user->getToken() && $user->getPermission() != "-1") { if ($_COOKIE['token'] == $user->getToken() && $user->getPermission() != "-1") {
$_SESSION['email'] = $_COOKIE['email']; $_SESSION['uid'] = $_COOKIE['uid'];
$_SESSION['token'] = $_COOKIE['token']; $_SESSION['token'] = $_COOKIE['token'];
} else { } else {
// delete cookies // delete cookies
setcookie("email", "", time() - 3600, '/'); setcookie("uid", "", time() - 3600, '/');
setcookie("token", "", time() - 3600, '/'); setcookie("token", "", time() - 3600, '/');
} }
} }
$user = isset($_SESSION['email']) ? new User(0, ['email' => $_SESSION['email']]) : null; $user = isset($_SESSION['uid']) ? new User($_SESSION['uid']) : null;
echo \View::make('index')->with('user', $user); echo \View::make('index')->with('user', $user);
} }

View File

@ -16,8 +16,12 @@ class PlayerController extends BaseController
{ {
private $player = null; private $player = null;
function __construct() private $user = null;
public function __construct()
{ {
$this->user = new User($_SESSION['uid']);
if (isset($_POST['pid'])) { if (isset($_POST['pid'])) {
$this->player = new Player($_POST['pid']); $this->player = new Player($_POST['pid']);
if (!$this->player) if (!$this->player)
@ -27,7 +31,7 @@ class PlayerController extends BaseController
public function index() public function index()
{ {
echo View::make('user.player')->with('players', (new User(0, ['email' => $_SESSION['email']]))->getPlayers()->toArray())->with('user', new User(0, ['email' => $_SESSION['email']])); echo View::make('user.player')->with('players', $this->user->getPlayers()->toArray())->with('user', $this->user);
} }
public function add() public function add()
@ -46,19 +50,17 @@ class PlayerController extends BaseController
if (!PlayerModel::where('player_name', $player_name)->get()->isEmpty()) if (!PlayerModel::where('player_name', $player_name)->get()->isEmpty())
View::json('该角色名已经被其他人注册掉啦', 6); View::json('该角色名已经被其他人注册掉啦', 6);
$user = new User(0, ['email' => $_SESSION['email']]); if ($this->user->getScore() < Option::get('score_per_player'))
if ($user->getScore() < Option::get('score_per_player'))
View::json('积分不够添加角色啦', 7); View::json('积分不够添加角色啦', 7);
$player = new PlayerModel(); $player = new PlayerModel();
$player->uid = $user->uid; $player->uid = $this->user->uid;
$player->player_name = $player_name; $player->player_name = $player_name;
$player->preference = "default"; $player->preference = "default";
$player->last_modified = Utils::getTimeFormatted(); $player->last_modified = Utils::getTimeFormatted();
$player->save(); $player->save();
$user->setScore(Option::get('score_per_player'), 'minus'); $this->user->setScore(Option::get('score_per_player'), 'minus');
View::json('成功添加了角色 '.$player_name.'', 0); View::json('成功添加了角色 '.$player_name.'', 0);
@ -66,17 +68,17 @@ class PlayerController extends BaseController
public function delete() public function delete()
{ {
$player_name = $this->player->eloquent_model->player_name; $player_name = $this->player->model->player_name;
$this->player->eloquent_model->delete(); $this->player->model->delete();
(new User(0, ['email' => $_SESSION['email']]))->setScore(Option::get('score_per_player'), 'plus'); $this->user->setScore(Option::get('score_per_player'), 'plus');
View::json('角色 '.$player_name.' 已被删除', 0); View::json('角色 '.$player_name.' 已被删除', 0);
} }
public function show() public function show()
{ {
echo json_encode($this->player->eloquent_model->toArray(), JSON_NUMERIC_CHECK); echo json_encode($this->player->model->toArray(), JSON_NUMERIC_CHECK);
} }
public function rename() public function rename()
@ -84,7 +86,7 @@ class PlayerController extends BaseController
$new_player_name = Utils::getValue('new_player_name', $_POST); $new_player_name = Utils::getValue('new_player_name', $_POST);
if (!$new_player_name) if (!$new_player_name)
throw new E('Invalid parameters', 1); throw new E('非法参数', 1);
if (!Validate::playerName($new_player_name)) if (!Validate::playerName($new_player_name))
{ {
@ -95,10 +97,10 @@ class PlayerController extends BaseController
if (!PlayerModel::where('player_name', $new_player_name)->get()->isEmpty()) if (!PlayerModel::where('player_name', $new_player_name)->get()->isEmpty())
View::json('此角色名已被他人使用,换一个吧~', 6); View::json('此角色名已被他人使用,换一个吧~', 6);
$old_player_name = $this->player->eloquent_model->player_name; $old_player_name = $this->player->model->player_name;
$this->player->eloquent_model->player_name = $new_player_name; $this->player->model->player_name = $new_player_name;
$this->player->eloquent_model->last_modified = Utils::getTimeFormatted(); $this->player->model->last_modified = Utils::getTimeFormatted();
$this->player->eloquent_model->save(); $this->player->model->save();
View::json('角色 '.$old_player_name.' 已更名为 '.$_POST['new_player_name'], 0); View::json('角色 '.$old_player_name.' 已更名为 '.$_POST['new_player_name'], 0);
} }
@ -111,34 +113,34 @@ class PlayerController extends BaseController
$tid = Utils::getValue('tid', $_POST); $tid = Utils::getValue('tid', $_POST);
if (!is_numeric($tid)) if (!is_numeric($tid))
throw new E('Invalid parameters.', 1); throw new E('非法参数', 1);
if (!($texture = Texture::find($tid))) if (!($texture = Texture::find($tid)))
View::json('Unexistent texture.', 6); View::json('Unexistent texture.', 6);
$field_name = "tid_".$texture->type; $field_name = "tid_".$texture->type;
$this->player->eloquent_model->$field_name = $tid; $this->player->model->$field_name = $tid;
$this->player->eloquent_model->last_modified = Utils::getTimeFormatted(); $this->player->model->last_modified = Utils::getTimeFormatted();
$this->player->eloquent_model->save(); $this->player->model->save();
View::json('材质已成功应用至角色 '.$this->player->eloquent_model->player_name.'', 0); View::json('材质已成功应用至角色 '.$this->player->model->player_name.'', 0);
} }
public function clearTexture() public function clearTexture()
{ {
$this->player->eloquent_model->preference = "default"; $this->player->model->preference = "default";
$this->player->eloquent_model->tid_steve = ""; $this->player->model->tid_steve = "";
$this->player->eloquent_model->tid_alex = ""; $this->player->model->tid_alex = "";
$this->player->eloquent_model->tid_cape = ""; $this->player->model->tid_cape = "";
$this->player->eloquent_model->last_modified = Utils::getTimeFormatted(); $this->player->model->last_modified = Utils::getTimeFormatted();
$this->player->eloquent_model->save(); $this->player->model->save();
View::json('角色 '.$this->player->eloquent_model->player_name.' 的材质已被成功重置', 0); View::json('角色 '.$this->player->model->player_name.' 的材质已被成功重置', 0);
} }
public function setPreference() public function setPreference()
@ -146,7 +148,7 @@ class PlayerController extends BaseController
if (!isset($_POST['preference']) || if (!isset($_POST['preference']) ||
($_POST['preference'] != "default" && $_POST['preference'] != "slim")) ($_POST['preference'] != "default" && $_POST['preference'] != "slim"))
{ {
throw new E('Invalid parameters.', 1); throw new E('非法参数', 1);
} }
$this->player->setPreference($_POST['preference']); $this->player->setPreference($_POST['preference']);

View File

@ -17,7 +17,7 @@ class SkinlibController extends BaseController
function __construct() function __construct()
{ {
$this->user = isset($_SESSION['email']) ? new User(0, ['email' => $_SESSION['email']]) : null; $this->user = isset($_SESSION['uid']) ? new User($_SESSION['uid']) : null;
} }
public function index() public function index()
@ -228,7 +228,7 @@ class SkinlibController extends BaseController
View::json('你还没有选择任何文件哟', 1); View::json('你还没有选择任何文件哟', 1);
if (!isset($_POST['public']) || ($_POST['public'] != 0 && $_POST['public'] != 1)) if (!isset($_POST['public']) || ($_POST['public'] != 0 && $_POST['public'] != 1))
View::json('Invalid parameters.', 1); View::json('非法参数', 1);
if ($_FILES['file']['type'] == "image/png" || $_FILES['file']['type'] == "image/x-png") if ($_FILES['file']['type'] == "image/png" || $_FILES['file']['type'] == "image/x-png")
{ {
@ -246,7 +246,7 @@ class SkinlibController extends BaseController
if ($ratio != 2) if ($ratio != 2)
View::json("不是有效的披风文件(宽 {$size[0]},高 {$size[1]}", 1); View::json("不是有效的披风文件(宽 {$size[0]},高 {$size[1]}", 1);
} else { } else {
View::json('Invalid parameters.', 1); View::json('非法参数', 1);
} }
} else { } else {

View File

@ -72,7 +72,7 @@ class TextureController extends BaseController
public function avatar($base64_email, $size = 128) public function avatar($base64_email, $size = 128)
{ {
$user = new User(0, ['email' => base64_decode($base64_email)]); $user = new User(null, ['email' => base64_decode($base64_email)]);
echo $user->getAvatar((int)$size); echo $user->getAvatar((int)$size);
} }
@ -85,15 +85,22 @@ class TextureController extends BaseController
{ {
// output image directly // output image directly
if ($t = Texture::find($tid)) { if ($t = Texture::find($tid)) {
header('Content-Type: image/png'); $filename = BASE_DIR."/textures/".$t->hash;
if ($t->type == "cape") {
$png = Minecraft::generatePreviewFromCape(BASE_DIR."/textures/".$t->hash, $size); if (\Storage::exist($filename)) {
imagepng($png); header('Content-Type: image/png');
imagedestroy($png);
if ($t->type == "cape") {
$png = Minecraft::generatePreviewFromCape($filename, $size);
imagepng($png);
imagedestroy($png);
} else {
$png = Minecraft::generatePreviewFromSkin($filename, $size);
imagepng($png);
imagedestroy($png);
}
} else { } else {
$png = Minecraft::generatePreviewFromSkin(BASE_DIR."/textures/".$t->hash, $size); Http::abort(404, '该材质文件已被删除');
imagepng($png);
imagedestroy($png);
} }
} else { } else {
// Default Steve Skin: https://minecraft.net/images/steve.png // Default Steve Skin: https://minecraft.net/images/steve.png

View File

@ -16,7 +16,7 @@ class UserController extends BaseController
function __construct() function __construct()
{ {
$this->action = isset($_GET['action']) ? $_GET['action'] : ""; $this->action = isset($_GET['action']) ? $_GET['action'] : "";
$this->user = new User(0, ['email' => $_SESSION['email']]); $this->user = new User($_SESSION['uid']);
} }
public function index() public function index()
@ -47,7 +47,7 @@ class UserController extends BaseController
{ {
// handle changing nickname // handle changing nickname
if ($this->action == "nickname") { if ($this->action == "nickname") {
if (!isset($_POST['new_nickname'])) throw new E('Invalid parameters.'); if (!isset($_POST['new_nickname'])) throw new E('非法参数');
if (Utils::convertString($_POST['new_nickname']) != $_POST['new_nickname']) if (Utils::convertString($_POST['new_nickname']) != $_POST['new_nickname'])
View::json('无效的昵称。昵称中包含了奇怪的字符。', 1); View::json('无效的昵称。昵称中包含了奇怪的字符。', 1);
@ -57,7 +57,7 @@ class UserController extends BaseController
// handle changing password // handle changing password
} elseif ($this->action == "password") { } elseif ($this->action == "password") {
if (!(isset($_POST['current_password']) && isset($_POST['new_password']))) if (!(isset($_POST['current_password']) && isset($_POST['new_password'])))
throw new E('Invalid parameters.'); throw new E('非法参数');
if (!$this->user->checkPasswd($_POST['current_password'])) if (!$this->user->checkPasswd($_POST['current_password']))
View::json('原密码错误', 1); View::json('原密码错误', 1);
@ -69,7 +69,7 @@ class UserController extends BaseController
// handle changing email // handle changing email
} elseif ($this->action == "email") { } elseif ($this->action == "email") {
if (!(isset($_POST['new_email']) && isset($_POST['password']))) if (!(isset($_POST['new_email']) && isset($_POST['password'])))
throw new E('Invalid parameters.'); throw new E('非法参数');
if (!filter_var($_POST['new_email'], FILTER_VALIDATE_EMAIL)) { if (!filter_var($_POST['new_email'], FILTER_VALIDATE_EMAIL)) {
View::json('邮箱格式错误', 3); View::json('邮箱格式错误', 3);
@ -84,7 +84,7 @@ class UserController extends BaseController
// handle deleting account // handle deleting account
} elseif ($this->action == "delete") { } elseif ($this->action == "delete") {
if (!isset($_POST['password'])) if (!isset($_POST['password']))
throw new E('Invalid parameters.'); throw new E('非法参数');
if (!$this->user->checkPasswd($_POST['password'])) if (!$this->user->checkPasswd($_POST['password']))
View::json('密码错误', 1); View::json('密码错误', 1);
@ -109,7 +109,7 @@ class UserController extends BaseController
if ($result) { if ($result) {
if ($result->type == "cape") throw new E('披风可不能设置为头像哦~', 1); if ($result->type == "cape") throw new E('披风可不能设置为头像哦~', 1);
if ((new User(0, ['email' => $_SESSION['email']]))->setAvatar($_POST['tid'])) { if ((new User($_SESSION['uid']))->setAvatar($_POST['tid'])) {
View::json('设置成功!', 0); View::json('设置成功!', 0);
} }
} else { } else {

View File

@ -11,24 +11,24 @@ class CheckLoggedInMiddleware implements IMiddleware
{ {
public function handle(Request $request) public function handle(Request $request)
{ {
if (isset($_COOKIE['email']) && isset($_COOKIE['token'])) { if (isset($_COOKIE['uid']) && isset($_COOKIE['token'])) {
$_SESSION['email'] = $_COOKIE['email']; $_SESSION['uid'] = $_COOKIE['uid'];
$_SESSION['token'] = $_COOKIE['token']; $_SESSION['token'] = $_COOKIE['token'];
} }
if (isset($_SESSION['email'])) { if (isset($_SESSION['uid'])) {
$user = new User(0, ['email' => $_SESSION['email']]); $user = new User($_SESSION['uid']);
if ($_SESSION['token'] != $user->getToken()) if ($_SESSION['token'] != $user->getToken())
\Http::redirect('../auth/login', '无效的 token请重新登录~'); \Http::redirect('../auth/login', '无效的 token请重新登录~');
if ($user->getPermission() == "-1") { if ($user->getPermission() == "-1") {
// delete cookies // delete cookies
setcookie("email", "", time() - 3600, '/'); setcookie("uid", "", time() - 3600, '/');
setcookie("token", "", time() - 3600, '/'); setcookie("token", "", time() - 3600, '/');
session_destroy(); session_destroy();
throw new E('你已经被本站封禁啦,请联系管理员解决', -1, true); throw new E('你已经被本站封禁啦,请联系管理员解决', 5, true);
} }
return $user; return $user;

View File

@ -6,6 +6,7 @@ use \Pecee\Http\Middleware\IMiddleware;
use \Pecee\Http\Request; use \Pecee\Http\Request;
use App\Exceptions\E; use App\Exceptions\E;
use Validate; use Validate;
use Utils;
use View; use View;
class CheckPostMiddleware implements IMiddleware class CheckPostMiddleware implements IMiddleware
@ -14,12 +15,12 @@ class CheckPostMiddleware implements IMiddleware
{ {
if (Utils::getValue('email', $_POST) != "") { if (Utils::getValue('email', $_POST) != "") {
if (!Validate::email($_POST['email'])) { if (!Validate::email($_POST['email'])) {
View::json('邮箱格式错误', 3); View::json('邮箱或角色名格式错误', 3);
} }
$_SESSION['auth_type'] = 'email'; $_SESSION['auth_type'] = 'email';
} elseif (Utils::getValue('username', $_POST) != "") { } elseif (Utils::getValue('username', $_POST) != "") {
if (!Validate::playerName($_POST['username'])) { if (!Validate::playerName($_POST['username'])) {
View::json('角色名格式错误', 3); View::json('邮箱或角色名格式错误', 3);
} }
$_SESSION['auth_type'] = 'username'; $_SESSION['auth_type'] = 'username';
} else { } else {

View File

@ -10,13 +10,13 @@ class RedirectIfLoggedInMiddleware implements IMiddleware
{ {
public function handle(Request $request) public function handle(Request $request)
{ {
if (isset($_COOKIE['email']) && isset($_COOKIE['token'])) { if (isset($_COOKIE['uid']) && isset($_COOKIE['token'])) {
$_SESSION['email'] = $_COOKIE['email']; $_SESSION['uid'] = $_COOKIE['uid'];
$_SESSION['token'] = $_COOKIE['token']; $_SESSION['token'] = $_COOKIE['token'];
} }
if (isset($_SESSION['email'])) { if (isset($_SESSION['uid'])) {
if ($_SESSION['token'] != (new User(0, ['email' => $_SESSION['email']]))->getToken()) if ($_SESSION['token'] != (new User($_SESSION['uid']))->getToken())
{ {
$_SESSION['msg'] = "无效的 token请重新登录~"; $_SESSION['msg'] = "无效的 token请重新登录~";
} else { } else {

View File

@ -13,7 +13,7 @@ class Closet
* Instance of App\Models\ClosetModel * Instance of App\Models\ClosetModel
* @var null * @var null
*/ */
private $eloquent_model = null; private $model = null;
/** /**
* Textures array generated from json * Textures array generated from json
@ -40,10 +40,10 @@ class Closet
function __construct($uid) function __construct($uid)
{ {
$this->uid = $uid; $this->uid = $uid;
$this->eloquent_model = ClosetModel::find($uid); $this->model = ClosetModel::find($uid);
if ($this->eloquent_model) { if ($this->model) {
$this->textures = json_decode($this->eloquent_model->textures, true); $this->textures = json_decode($this->model->textures, true);
$this->textures = is_null($this->textures) ? [] : $this->textures; $this->textures = is_null($this->textures) ? [] : $this->textures;
$textures_invalid = []; $textures_invalid = [];
@ -71,9 +71,9 @@ class Closet
unset($textures_invalid); unset($textures_invalid);
} else { } else {
$this->eloquent_model = new ClosetModel(); $this->model = new ClosetModel();
$this->eloquent_model->uid = $uid; $this->model->uid = $uid;
$this->eloquent_model->save(); $this->model->save();
} }
} }
@ -102,8 +102,8 @@ class Closet
'add_at' => time() 'add_at' => time()
); );
$this->eloquent_model->textures = json_encode($this->textures); $this->model->textures = json_encode($this->textures);
return $this->eloquent_model->save(); return $this->model->save();
} }
/** /**
@ -131,8 +131,8 @@ class Closet
foreach ($this->textures as $item) { foreach ($this->textures as $item) {
if ($item['tid'] == $tid) { if ($item['tid'] == $tid) {
array_splice($this->textures, $offset, 1); array_splice($this->textures, $offset, 1);
$this->eloquent_model->textures = json_encode($this->textures); $this->model->textures = json_encode($this->textures);
return $this->eloquent_model->save(); return $this->model->save();
} }
$offset++; $offset++;
} }

View File

@ -16,21 +16,24 @@ class Player
/** /**
* Construct player with pid or playername * Construct player with pid or playername
* @param int $pid *
* @param int $pid
* @param string $player_name * @param string $player_name
*/ */
public function __construct($pid, $player_name = "") public function __construct($pid, $player_name = "")
{ {
if ($player_name == "") { if ($player_name == "") {
$this->pid = $pid; $this->pid = $pid;
$this->model = PlayerModel::find($pid); $this->model = PlayerModel::find($pid);
} else { } else {
$this->model = PlayerModel::where('player_name', $player_name)->first(); $this->model = PlayerModel::where('player_name', $player_name)->first();
@$this->pid = $this->model->pid;
} }
if (!$this->model) if (!$this->model) {
\Http::abort(404, '角色不存在'); \Http::abort(404, '角色不存在');
} else {
$this->pid = $this->model->pid;
}
$this->player_name = $this->model->player_name; $this->player_name = $this->model->player_name;
@ -40,6 +43,7 @@ class Player
/** /**
* Get textures of player * Get textures of player
*
* @param string $type steve|alex|cape, 'skin' for texture of preferred model * @param string $type steve|alex|cape, 'skin' for texture of preferred model
* @return string sha256-hash of texture file * @return string sha256-hash of texture file
*/ */
@ -58,7 +62,7 @@ class Player
{ {
if (!isset($tids['tid_steve']) && !isset($tids['tid_alex']) && !isset($tids['tid_cape'])) if (!isset($tids['tid_steve']) && !isset($tids['tid_alex']) && !isset($tids['tid_cape']))
{ {
throw new E('Invalid parameters.', 1); throw new E('非法参数', 1);
} }
$this->model->tid_steve = isset($tids['tid_steve']) ? $tids['tid_steve'] : $this->model['tid_steve']; $this->model->tid_steve = isset($tids['tid_steve']) ? $tids['tid_steve'] : $this->model['tid_steve'];
@ -74,7 +78,7 @@ class Player
if ($this->getTexture($type) != "") { if ($this->getTexture($type) != "") {
$filename = BASE_DIR."/textures/".$this->getTexture($type); $filename = BASE_DIR."/textures/".$this->getTexture($type);
if (file_exists($filename)) { if (\Storage::exist($filename)) {
header('Content-Type: image/png'); header('Content-Type: image/png');
// Cache friendly // Cache friendly
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $this->getLastModified()).' GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $this->getLastModified()).' GMT');

View File

@ -47,18 +47,19 @@ class User
* @param int $uid * @param int $uid
* @param array $info * @param array $info
*/ */
public function __construct($uid, Array $info) public function __construct($uid, Array $info = [])
{ {
// Construct user with uid|email|player_name // Construct user with uid|email|player_name
if ($uid != 0) { if ($uid !== null) {
$this->uid = $uid; $this->uid = $uid;
$this->model = UserModel::find($uid); $this->model = UserModel::find($uid);
} else { } else {
if (isset($info['email'])) { if (isset($info['email'])) {
$this->email = Utils::convertString($email); $this->email = Utils::convertString($info['email']);
$this->model = UserModel::where('email', $this->email)->first(); $this->model = UserModel::where('email', $this->email)->first();
} elseif (isset($info['username'])) { } elseif (isset($info['username'])) {
$this->uid = PlayerModel::where('player_name', $info['username'])->first()['uid']; $player = PlayerModel::where('player_name', $info['username'])->first();
$this->uid = $player ? $player['uid'] : 0;
$this->model = UserModel::find($this->uid); $this->model = UserModel::find($this->uid);
} else { } else {
throw new \InvalidArgumentException('Invalid arguments'); throw new \InvalidArgumentException('Invalid arguments');

View File

@ -29,6 +29,11 @@ class Storage
return fread(fopen($filename, 'r'), filesize($filename)); return fread(fopen($filename, 'r'), filesize($filename));
} }
public static function exist($filename)
{
return file_exists($filename);
}
/** /**
* Remove a file * Remove a file
* *

View File

@ -21,10 +21,11 @@ class Utils
* *
* @param string $key * @param string $key
* @param array $array * @param array $array
* @return string|boolean * @param string $default
* @return string
*/ */
public static function getValue($key, $array) { public static function getValue($key, $array, $default = "") {
return array_key_exists($key, $array) ? $array[$key] : false; return array_key_exists($key, $array) ? $array[$key] : $default;
} }
/** /**
@ -49,7 +50,7 @@ class Utils
public static function getNameOrEmail(\App\Models\User $user) public static function getNameOrEmail(\App\Models\User $user)
{ {
return ($user->getNickName() == '') ? $_SESSION['email'] : $user->getNickName(); return ($user->getNickName() == '') ? $user->email : $user->getNickName();
} }
public static function getAvatarFname(\App\Models\User $user) public static function getAvatarFname(\App\Models\User $user)

View File

@ -17,7 +17,7 @@ class Validate
foreach ($keys as $key) { foreach ($keys as $key) {
if (!isset($_POST[$key])) { if (!isset($_POST[$key])) {
if ($silent) return false; if ($silent) return false;
throw new E('Invalid parameters.', 1); throw new E('非法参数', 1);
} }
} }
return true; return true;

View File

@ -2,7 +2,7 @@
* @Author: printempw * @Author: printempw
* @Date: 2016-07-17 10:54:22 * @Date: 2016-07-17 10:54:22
* @Last Modified by: printempw * @Last Modified by: printempw
* @Last Modified time: 2016-08-14 13:22:35 * @Last Modified time: 2016-08-16 22:23:42
*/ */
'use strict'; 'use strict';
@ -21,17 +21,22 @@ function freshCaptcha() {
var login_fails = 0; var login_fails = 0;
$('#login-button').click(function() { $('#login-button').click(function() {
var data = new Object(); var data = new Object();
var email_or_uname = $('#email_or_username').val();
data.email = $("#email").val(); if (/\S+@\S+\.\S+/.test($('#email_or_username').val())) {
data.password = $("#password").val(); data.email = email_or_uname;
} else {
data.username = email_or_uname;
}
if (data.email == "") { data.password = $('#password').val();
showMsg('你还没有填写邮箱哦'); data.keep = $('#keep').prop('checked') ? true : false;
$('#email').focus();
if (email_or_uname == "") {
showMsg('你还没有填写邮箱/角色名哦');
$('#email_or_username').focus();
// check valid email address // check valid email address
} else if (!/\S+@\S+\.\S+/.test(data.email)) {
showMsg('邮箱格式不正确!', 'warning');
} else if (data.password == "") { } else if (data.password == "") {
showMsg('密码要好好填哦'); showMsg('密码要好好填哦');
$('#password').focus(); $('#password').focus();
@ -56,13 +61,6 @@ $('#login-button').click(function() {
}, },
success: function(json) { success: function(json) {
if (json.errno == 0) { if (json.errno == 0) {
// 7 days
var time = $('#keep').prop('checked') ? 604800 : null;
docCookies.setItem('email', data.email, time, '/');
docCookies.setItem('token', json.token, time, '/');
swal({ swal({
type: 'success', type: 'success',
html: json.msg html: json.msg

View File

@ -2,7 +2,7 @@
* @Author: printempw * @Author: printempw
* @Date: 2016-07-16 10:02:24 * @Date: 2016-07-16 10:02:24
* @Last Modified by: printempw * @Last Modified by: printempw
* @Last Modified time: 2016-08-15 12:36:21 * @Last Modified time: 2016-08-16 22:13:55
*/ */
'use strict'; 'use strict';
@ -355,6 +355,8 @@ function deletePlayer(pid) {
swal({ swal({
type: 'success', type: 'success',
html: json.msg html: json.msg
}).then(function() {
$('tr#'+pid).remove();
}); });
} else { } else {
swal({ swal({

View File

@ -2,7 +2,7 @@
* @Author: printempw * @Author: printempw
* @Date: 2016-07-16 09:02:32 * @Date: 2016-07-16 09:02:32
* @Last Modified by: printempw * @Last Modified by: printempw
* @Last Modified time: 2016-08-15 22:20:12 * @Last Modified time: 2016-08-16 18:01:22
*/ */
function showModal(msg, title, type, callback) { function showModal(msg, title, type, callback) {
@ -54,9 +54,6 @@ function logout(with_out_confirm, callback) {
url: "../auth/logout", url: "../auth/logout",
dataType: "json", dataType: "json",
success: function(json) { success: function(json) {
docCookies.removeItem("email", "/");
docCookies.removeItem("token", "/");
swal({ swal({
type: 'success', type: 'success',
html: json.msg html: json.msg
@ -71,55 +68,8 @@ function logout(with_out_confirm, callback) {
url: "../auth/logout", url: "../auth/logout",
dataType: "json", dataType: "json",
success: function(json) { success: function(json) {
docCookies.removeItem("email", "/");
docCookies.removeItem("token", "/");
if (callback) callback(json); if (callback) callback(json);
} }
}); });
} }
} }
/**
* cookie.js
* https://developer.mozilla.org/en-US/docs/DOM/document.cookie
*/
var docCookies = {
getItem: function (sKey) {
if (!sKey) { return null; }
return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
},
setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) {
if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return false; }
var sExpires = "";
if (vEnd) {
switch (vEnd.constructor) {
case Number:
sExpires = vEnd === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" + vEnd;
break;
case String:
sExpires = "; expires=" + vEnd;
break;
case Date:
sExpires = "; expires=" + vEnd.toUTCString();
break;
}
}
document.cookie = encodeURIComponent(sKey) + "=" + encodeURIComponent(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : "");
return true;
},
removeItem: function (sKey, sPath, sDomain) {
if (!this.hasItem(sKey)) { return false; }
document.cookie = encodeURIComponent(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "");
return true;
},
hasItem: function (sKey) {
if (!sKey) { return false; }
return (new RegExp("(?:^|;\\s*)" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie);
},
keys: function () {
var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, "").split(/\s*(?:\=[^;]*)?;\s*/);
for (var nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) { aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]); }
return aKeys;
}
};

View File

@ -56,7 +56,7 @@
<!-- The user image in the menu --> <!-- The user image in the menu -->
<li class="user-header"> <li class="user-header">
<img src="../avatar/128/{{ Utils::getAvatarFname($user) }}" alt="User Image"> <img src="../avatar/128/{{ Utils::getAvatarFname($user) }}" alt="User Image">
<p>{{ $_SESSION['email'] }}</p> <p>{{ $user->email }}</p>
</li> </li>
<!-- Menu Footer--> <!-- Menu Footer-->
<li class="user-footer"> <li class="user-footer">

View File

@ -14,7 +14,7 @@
<form id="login-form"> <form id="login-form">
<div class="form-group has-feedback"> <div class="form-group has-feedback">
<input id="email" type="email" class="form-control" placeholder="邮箱"> <input id="email_or_username" type="email" class="form-control" placeholder="邮箱或角色名">
<span class="glyphicon glyphicon-envelope form-control-feedback"></span> <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
</div> </div>
<div class="form-group has-feedback"> <div class="form-group has-feedback">

View File

@ -58,7 +58,7 @@
<!-- The user image in the menu --> <!-- The user image in the menu -->
<li class="user-header"> <li class="user-header">
<img src="./avatar/128/{{ Utils::getAvatarFname($user) }}" alt="User Image"> <img src="./avatar/128/{{ Utils::getAvatarFname($user) }}" alt="User Image">
<p>{{ $_SESSION['email'] }}</p> <p>{{ $user->email }}</p>
</li> </li>
<!-- Menu Footer--> <!-- Menu Footer-->
<li class="user-footer"> <li class="user-footer">

View File

@ -90,7 +90,7 @@
<!-- The user image in the menu --> <!-- The user image in the menu -->
<li class="user-header"> <li class="user-header">
<img src="../avatar/128/{{ Utils::getAvatarFname($user) }}" alt="User Image"> <img src="../avatar/128/{{ Utils::getAvatarFname($user) }}" alt="User Image">
<p>{{ $_SESSION['email'] }}</p> <p>{{ $user->email }}</p>
</li> </li>
<!-- Menu Footer--> <!-- Menu Footer-->
<li class="user-footer"> <li class="user-footer">

View File

@ -54,7 +54,7 @@
<!-- The user image in the menu --> <!-- The user image in the menu -->
<li class="user-header"> <li class="user-header">
<img src="../avatar/128/{{ Utils::getAvatarFname($user) }}" alt="User Image"> <img src="../avatar/128/{{ Utils::getAvatarFname($user) }}" alt="User Image">
<p>{{ $_SESSION['email'] }}</p> <p>{{ $user->email }}</p>
</li> </li>
<!-- Menu Footer--> <!-- Menu Footer-->
<li class="user-footer"> <li class="user-footer">