checkLogin(); } public function run() { $user = self::getUserService(); $userinfo = $user->getUserById($this->uid); $this->view->set_tpl("index/user"); // 中间的模板 $config = InitPHP::getConfig(); $title = $config['sitename']; $userinfo['gravatar'] = $this->get_gravatar($userinfo['email']); $this->view->assign("userinfo", $userinfo); $this->view->assign("active", "userindex"); $this->view->assign("title", $title); $this->view->display(); } public function index() { $user = self::getUserService(); $userinfo = $user->getUserById($this->uid); $this->view->set_tpl("index/user"); // 中间的模板 $config = InitPHP::getConfig(); $title = $config['sitename']; $userinfo['gravatar'] = $this->get_gravatar($userinfo['email']); $this->view->assign("userinfo", $userinfo); $this->view->assign("active", "userindex"); $this->view->assign("title", $title); $this->view->display(); } /** * 节点列表 */ public function node() { $user = self::getUserService(); $userinfo = $user->getUserById($this->uid); $config = InitPHP::getConfig(); $title = $config['sitename']; $node = self::getNode(); $nodeinfo = $node->getAllNode(); foreach ($nodeinfo as $k => $v) { $data[$v['node_type']][] = $v; } $userinfo['gravatar'] = $this->get_gravatar($userinfo['email']); $this->view->assign("userinfo", $userinfo); $this->view->assign("title", $title); $this->view->assign("active", "node"); $this->view->assign("data", $data); $this->view->set_tpl("index/node"); $this->view->display(); } /** * 我的信息 */ public function my() { $user = self::getUserService(); $userinfo = $user->getUserById($this->uid); $this->view->set_tpl("index/myinfo"); // 中间的模板 $config = InitPHP::getConfig(); $title = $config['sitename']; $userinfo['gravatar'] = $this->get_gravatar($userinfo['email']); $this->view->assign("userinfo", $userinfo); $this->view->assign("active", "info"); $this->view->assign("title", $title); $this->view->display(); } /** * 签到获取流量 */ public function docheckin() { $config = InitPHP::getConfig(); $user = self::getUserService(); $userinfo = $user->getUserById($this->uid); if ($userinfo['last_check_in_time'] > strtotime(date("Y-m-d"))) { JsMessage("您当前不能进行签到!", '/user/index.html'); die(); } if (($userinfo['transfer_enable'] - $userinfo['u'] - $userinfo['d']) < 2048 * 1024 * 1024) { $transfer_to_add = 2048; } else { $transfer_to_add = rand($config['check_min'], $config['check_max']); } $data['transfer_enable'] = $userinfo['transfer_enable'] + $transfer_to_add * 1024 * 1024; $data['last_check_in_time'] = time(); $result = $user->updatePortPass($this->uid, $data); if ($result) { JsMessage("签到成功,你本次签到获得流量" . $transfer_to_add . "M!", '/user/index.html'); } else JsMessage("您当前不能进行签到!", '/user/index.html'); } /** * 获取邀请码 */ public function code() { $user = self::getUserService(); $userinfo = $user->getUserById($this->uid); if ($userinfo['plan'] != "VIP") { JsMessage("您无权查看邀请码!"); } $userinfo['gravatar'] = $this->get_gravatar($userinfo['email']); $code = $user->getInvite(); $code = array( $code ); $config = InitPHP::getConfig(); $title = $config['sitename']; $this->view->set_tpl("index/code"); $this->view->assign("userinfo", $userinfo); $this->view->assign("active", "code"); $this->view->assign("title", $title); $this->view->assign("code", $code); $this->view->display(); } /** * 二维码显示 */ public function qr() { $user = self::getUserService(); $userinfo = $user->getUserById($this->uid); $nodeid = $this->controller->get_get("id"); $node = InitPHP::getService("node"); $nodeinfo = $node->getNodeById($nodeid); $ssurl = $nodeinfo['node_method'] . ":" . $userinfo['passwd'] . "@" . $nodeinfo['node_server'] . ":" . $userinfo['port']; $ssqr = "ss://" . base64_encode($ssurl); $qrcode = InitPHP::getLibrarys("qrcode"); $qrcode->getQr($ssqr); die(); } /** * 修改用户资料 */ public function modify() { $do = $this->controller->get_gp("do"); if ($do == "info") { $data = $this->controller->get_gp(array( 'nowpassword', 'password', 'email' )); $user = self::getUserService(); $result = $user->updateUserinfo($this->uid, $data); if (! $result) { JsMessage("当前密码错误!"); } else { JsMessage("修改成功!", "/user/index.html"); } } elseif ($do == "port_pass") { $data = $this->controller->get_gp(array( 'passwd' )); $user = self::getUserService(); $result = $user->updatePortPass($this->uid, $data); JsMessage("修改成功", "/user/index.html"); } else { $user = self::getUserService(); $userinfo = $user->getUserById($this->uid); $this->view->set_tpl("index/modify"); // 中间的模板 $config = InitPHP::getConfig(); $title = $config['sitename']; $userinfo['gravatar'] = $this->get_gravatar($userinfo['email']); $this->view->assign("userinfo", $userinfo); $this->view->assign("active", "modify"); $this->view->assign("title", $title); $this->view->display(); } } public function reset(){ $do=$this->controller->get_gp("do"); $user = self::getUserService(); if ($do=="pass"){ $username=$this->controller->get_gp("username"); $userinfo=$user->getUserByNameOrEmail($username); $code = md5(uniqid("shadowsocks" . time())); $result = $user->doReset($userinfo['uid'], $code); if ($userinfo) { $subject = '重置你的shadowsocks5密码,如果不是本人操作,请忽略本邮件!'; $message = " 你正在重置你的shadowsocks5密码,如果不是本人操作,请忽略本邮件!

尊敬的ss5用户:".$userinfo['user_name']."

如需重置,请点击以下链接进行操作:
立即重置
如果您无法直接点击,请将以下网址复制到浏览器访问:".SITE_URL."/user/reset.html?do=resetpass&uid=" . $userinfo['uid'] . "&code=" . $code . "
"; sendmail($userinfo['email'],$subject,$message,'webmaster@tailsocks.com'); JsMessage("重置密码已经提交,请查收邮箱".$userinfo['email']."进行下一步操作!"); }else{ JsMessage("用户不存在!"); } }elseif ($do=='resetpass'){ $uid=$this->controller->get_gp("uid"); $code = $this->controller->get_gp("code"); $pass=$this->controller->get_gp("password"); if (strlen($pass)>6){ $result=$user->doReset($uid, $code,$pass); if ($result) { JsMessage("密码修改成功,请使用新密码登录!","/user/login.html"); } else { JsMessage("密码修改失败,可能是超时造成的!", '/'); } }else { $result = $user->doReset($uid, $code, true); if ($result) { $config = InitPHP::getConfig(); $title = $config['sitename']; $this->view->assign("title", $title); $this->view->set_tpl("index/resetpass"); // 中间的模板 $this->view->display(); } else { JsMessage("非法访问!", '/user/index.html'); } } } else { $config = InitPHP::getConfig(); $title = $config['sitename']; $this->view->assign("title", $title); $this->view->set_tpl("index/reset"); // 中间的模板 $this->view->display(); } } public function unfreeze() { $user = self::getUserService(); $do = $this->controller->get_gp("do"); if ($do == 'reset') { $code = $this->controller->get_gp("code"); $result = $user->doFreeze($this->controller->get_gp("uid"), $code, true); if ($result) { JsMessage("您的账号已经解除冻结,可以正常使用!", '/user/index.html'); } else { JsMessage("解冻失败,请确认步骤是否正确!", '/user/index.html'); } } else { $code = md5(uniqid("shadowsocks" . time())); $result = $user->doFreeze($this->uid, $code); $userinfo = $user->getUserById($this->uid); if ($userinfo) { $subject = '请激活你的shadowsocks5!如果不是本人操作,请忽略本邮件!'; $message = " 请激活你的shadowsocks5!如果不是本人操作,请忽略本邮件!

尊敬的ss5用户:".$userinfo['user_name']."

如需解除冻结,请点击以下链接进行解冻:
立即激活
如果您无法直接点击,请将以下网址复制到浏览器访问:".SITE_URL."/user/unfreeze.html?do=reset&uid=" . $this->uid . "&code=" . $code . "
"; sendmail($userinfo['email'],$subject,$message,'webmaster@tailsocks.com'); JsMessage("解冻申请已经提交,请查收邮箱进行下一步解冻!"); }else{ JsMessage("操作失败!"); } } } public function login() { if ($this->controller->get_gp("do") == "login") { $data = $this->controller->get_gp(array( "username", "password", "remember_me" )); $user = self::getUserService(); $result = $user->login($data); if ($result) { $session = self::getSession(); $function = self::getFunction(); $session->set('userid', intval($result['uid'])); $session->set('username', htmlspecialchars($result['user_name'])); $function->goto_url('/user/index.html'); } else { JsMessage("用户名或密码错误!"); } } else { $config = InitPHP::getConfig(); $title = $config['sitename']; $this->view->assign("title", $title); $this->view->set_tpl("index/login"); // 中间的模板 $this->view->display(); } } public function reg() { $config = InitPHP::getConfig(); if ($this->controller->get_gp("do") == "reg") { $user = self::getUserService(); $userinfo = $this->controller->get_gp(array( "username", "password", "email", "code" )); if ($userinfo['username'] == "" || $userinfo['email'] == "") { JsMessage("用户名或邮箱不能为空!"); } if ($config['isinviteonly']) { if ($user->checkInvite($userinfo['code'])) { // 检测邀请码 if ($user->checkUser($userinfo)) { $data = array(); $data['user_name'] = $userinfo['username']; $data['email'] = $userinfo['email']; $data['pass'] = md5($userinfo['password']); $data['passwd'] = rand(10000, 99999); $data['transfer_enable'] = $config['transfer']; // $data['port'] = $port; $data['t'] = 0; $data['u'] = 0; $data['d'] = 0; $data['plan'] = "A"; $data['switch'] = 1; $data['enable'] = 1; $data['type'] = 7; $data['reg_date'] = date("Y-m-d H:i:s"); $data['last_login_time'] = time(); $data['invite_code'] = $userinfo['code']; $data['invite_num'] = $config['invite_num']; $data['money'] = 0.00; $uid = $user->createUser($data); if ($uid) { $user->deleteInvite($userinfo['code']); $session = self::getSession(); $session->set('userid', intval($uid)); $session->set('username', htmlspecialchars($data['user_name'])); $this->sendMail($data['email']); JsMessage("注册成功,端口及密码请查看用户中心右下角", "/user/index.html"); } } else { JsMessage("用户名或者Email已经被注册了!"); } } else { JsMessage("站点开启了邀请注册,当前邀请码无效!"); } } else { // 直接注册 if ($user->checkUser($userinfo)) { $data = array(); $data['user_name'] = $userinfo['username']; $data['email'] = $userinfo['email']; $data['pass'] = md5($userinfo['password']); $data['passwd'] = rand(10000, 99999); $data['transfer_enable'] = $config['transfer']; // $data['port'] = $port; $data['t'] = 0; $data['u'] = 0; $data['d'] = 0; $data['plan'] = "A"; $data['switch'] = 1; $data['enable'] = 1; $data['type'] = 7; $data['reg_date'] = date("Y-m-d H:i:s"); $data['invite_num'] = $config['invite_num']; $data['money'] = 0.00; $uid = $user->createUser($data); if ($uid) { $session = self::getSession(); $session->set('userid', intval($uid)); $session->set('username', htmlspecialchars($data['user_name'])); $this->sendMail($data['email']); JsMessage("注册成功", "/user/run"); } } else { JsMessage("用户名或者Email已经被注册了!"); } } } else { $title = $config['sitename']; $isinviteonly = $config['isinviteonly']; $this->view->assign("title", $title); $this->view->assign("isinviteonly", $isinviteonly); $this->view->set_tpl("index/reg"); // 中间的模板 $this->view->display(); } } private function sendMail($to) { $subject = "欢迎使用ShadowSocks服务"; $message = " 欢迎使用ShadowSocks服务

欢迎您加入shadowsocks5.com

现在您可以免费使用我们的服务,每个月,您会有30G的流量供您使用SS服务,记得每天签到也会送流量哦!
注意:本系统会自动删除三天内使用流量为0的用户,请注册用户务必在三天内进行使用,否则将被判定为垃圾用户,及时释放资源以供其他用户使用!同时,请勿滥用本服务器进行发送垃圾邮件以及下载涉及版权的视频,谢谢合作!
"; // 当发送 HTML 电子邮件时,请始终设置 content-type sendmail($to,$subject,$message,'webmaster@tailsocks.com'); } private function checkLogin() { $list = array( "login", 'reg', 'reset', 'unfreeze' ); $session = self::getSession(); $userid = $session->get('userid'); $a = $this->getA(); if (empty($userid)) { if (! in_array($a, $list)) { $function = self::getFunction(); $function->goto_url('/user/login.html'); } } else { $this->uid = $userid; } } public function logout() { $session = self::getSession(); $function = self::getFunction(); $session->clear(); $function->goto_url('/user/login.html'); } /** * * @return userService */ private function getUserService() { return InitPHP::getService("user"); } /** * * @return sessionInit */ private function getSession() { return InitPHP::getUtils("session"); } /** * * @return functionInit */ private function getFunction() { return InitPHP::getLibrarys("function"); } /** * * @return emailInit */ private function getEmail() { return InitPHP::getLibrarys("email"); } /** * * @return nodeService */ private function getNode() { return InitPHP::getService("node"); } /** * 获取头像 * * @param unknown $email * @param number $s * @param string $d * @param string $r * @param string $img * @param unknown $atts * @return string */ function get_gravatar($email, $s = 80, $d = 'mm', $r = 'g', $img = false, $atts = array()) { $url = 'https://secure.gravatar.com/avatar/'; $url .= md5(strtolower(trim($email))); $url .= "?s=$s&d=$d&r=$r"; if ($img) { $url = ' $val) $url .= ' ' . $key . '="' . $val . '"'; $url .= ' />'; } return $url; } // public function getEmail(){ // return InitPHP::getLibrarys("Email"); // } }