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");
// }
}