input('email'); $password = $request->input('password'); if (empty($email)){ return ApiResponse::apiResponse(400,"邮箱不能为空",null,400); } if (empty($password)){ return ApiResponse::apiResponse(400,"密码不能为空",null,400); } $user = User::where('email', $email)->first(); if (!$user) { //abort(200, __('Incorrect email or password')); return ApiResponse::apiResponse(400,"账号或者密码错误",null,400); } if (!Helper::multiPasswordVerify( $user->password_algo, $user->password_salt, $password, $user->password) ) { return ApiResponse::apiResponse(400,"账号或者密码错误",null,400); } //判断到期 // $expireTime = $user["expired_at"]; // // if ($expireTime < date('Y-m-d H:i:s')){ // return response()->json(['ret' => 445, 'msg' => "用户到期,请即使续费"], 200); // } if ($user->banned) { // abort(500, __('Your account has been suspended')); return ApiResponse::apiResponse(300,"账户已经被禁用",null,447); } $data = [ 'token' => $user->token, 'auth_data' => base64_encode("{$user->email}:{$user->password}") ]; if ($user->is_admin) $data['is_admin'] = true; return ApiResponse::apiResponse(0,"",$data); } /** * 注册接口 * @return \Illuminate\Http\JsonResponse */ function register(Request $request) { if ((int)config('v2board.register_limit_by_ip_enable', 0)) { $registerCountByIP = Cache::get(CacheKey::get('REGISTER_IP_RATE_LIMIT', $request->ip())) ?? 0; if ((int)$registerCountByIP >= (int)config('v2board.register_limit_count', 3)) { abort(500, __('Register frequently, please try again after 1 hour')); } } $email = $request->input('email'); $password = $request->input('password'); $exist = User::where('email', $email)->first(); if ($exist) { return ApiResponse::apiResponse(400,"账号已经存在"); } $user = new User(); $user->email = $email; $user->password = password_hash($password, PASSWORD_DEFAULT); $user->uuid = Helper::guid(true); $user->token = Helper::guid(); // try out if ((int)config('v2board.try_out_plan_id', 0)) { $plan = Plan::find(config('v2board.try_out_plan_id')); if ($plan) { $user->transfer_enable = $plan->transfer_enable * 1073741824; $user->plan_id = $plan->id; $user->group_id = $plan->group_id; $user->expired_at = time() + (config('v2board.try_out_hour', 1) * 3600); } } if (!$user->save()) { return ApiResponse::apiResponse(400,"注册失败"); } $data = [ 'token' => $user->token, 'auth_data' => base64_encode("{$user->email}:{$user->password}") ]; $user->last_login_at = time(); $user->save(); if ((int)config('v2board.register_limit_by_ip_enable', 0)) { Cache::put( CacheKey::get('REGISTER_IP_RATE_LIMIT', $request->ip()), (int)$registerCountByIP + 1, (int)config('v2board.register_limit_expire', 60) * 60 ); } return ApiResponse::apiResponse(0,"注册成功",$data); } /** * 获取我的订阅 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function getSubscribe(Request $request) { $user = User::where('id', $request->user['id']) ->select([ 'plan_id', 'token', 'expired_at', 'u', 'd', 'transfer_enable', 'email', 'uuid', 'banned' ]) ->first(); if (!$user) { abort(500, __('The user does not exist')); } if ($user->plan_id) { $user['plan'] = Plan::find($user->plan_id); if (!$user['plan']) { abort(500, __('Subscription plan does not exist')); } } $model = Order::where('user_id', $request->user['id'])->where("status","=",0) ->orderBy('created_at', 'DESC'); $order = $model->first(); if (empty($order)){ $user["paid"] = 0; } else{ $user["paid"] = 1; } $user["expiretime"] = date('Y-m-d H:i:s',$user["expired_at"]); $user["unusedTraffic"] = "您的总流量:" . Helper::trafficConvert($user["transfer_enable"]) ." ". "使用流量:" . Helper::trafficConvert($user["u"] + $user["d"]) ; $user['subscribe_url'] = Helper::getSubscribeUrl("/api/v1/client/subscribe?token={$user['token']}&flag=clash"); $userService = new UserService(); $user['reset_day'] = $userService->getResetDay($user); return ApiResponse::apiResponse(0,"",$user); } /** * 获取订阅套餐 * @param Request $request * @return */ public function fetch(Request $request) { $plan = Plan::where('show', 1)->get(); return ApiResponse::apiResponse(0,"",$plan); } /** * 获取线路 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function server(Request $request){ $user = User::find($request->user['id']); $servers = []; $userService = new UserService(); if ($userService->isAvailable($user)) { $serverService = new ServerService(); $servers = $serverService->getAvailableServers($user); } if (empty($servers)){ return ApiResponse::apiResponse(400,"获取线路失败"); } return ApiResponse::apiResponse(0,"",$servers); } public function getQuickLoginUrl(Request $request) { $authorization = $request->input('auth_data') ?? $request->header('authorization'); if (!$authorization) return ApiResponse::apiResponse(403,"未登录或者登录已经过期"); $authData = explode(':', base64_decode($authorization)); if (!isset($authData[0]) || !isset($authData[1])) return ApiResponse::apiResponse(403,"请求异常"); $user = User::where('email', $authData[0]) ->where('password', $authData[1]) ->first(); if (!$user) { //abort(500, __('Token error')); return ApiResponse::apiResponse(500,"请求异常"); } $code = Helper::guid(); $key = CacheKey::get('TEMP_TOKEN', $code); Cache::put($key, $user->id, 60); $redirect = '/#/login?verify=' . $code . '&redirect=' . ($request->input('redirect') ? $request->input('redirect') : 'dashboard'); if (config('v2board.app_url')) { $url = config('v2board.app_url') . $redirect; } else { $url = url($redirect); } return ApiResponse::apiResponse(0,"",$url); } public function getVersion(Request $request) { $from = $request->input("from"); $version = $request->input("version"); $versionData = [ 'windows_version' => config('v2board.windows_version'), 'windows_download_url' => config('v2board.windows_download_url'), 'macos_version' => config('v2board.macos_version'), 'macos_download_url' => config('v2board.macos_download_url'), 'android_version' => config('v2board.android_version'), 'android_download_url' => config('v2board.android_download_url') ]; $sVersion = ""; $sDownloadUrl = ""; if ($from == "android") { $sVersion = $versionData["android_version"]; $sDownloadUrl = $versionData["android_download_url"]; } else if ($from == "win"){ $sVersion = $versionData["windows_version"]; $sDownloadUrl = $versionData["windows_download_url"]; } else if ($from == "macos") { $sVersion = $versionData["macos_version"]; $sDownloadUrl = $versionData["macos_download_url"]; } $data = [ 'version' => $sVersion, 'appmsg' => "修复一些bug", 'download_url' => $sDownloadUrl, ]; if (version_compare($sVersion,$version,">")){ //服务器大于客户端 $data["isUpdate"] = 1; return ApiResponse::apiResponse(0,"有更新",$data); } $data["isUpdate"] = 0; return ApiResponse::apiResponse(0,"没有更新",$data); } public function getUrl(){ $base_url = "https://lanyun123.cc"; $path = "/#/"; $base_url = $base_url . $path; $data = [ "register" => $base_url . "register", "user_reset" => $base_url ."forgetpassword" ]; return ApiResponse::apiResponse(0,"",$data); } // private function Token(Request $request){ // $authorization = $request->input('auth_data') ?? $request->header('authorization'); // if (!$authorization) // return 402; // // $authData = explode(':', base64_decode($authorization)); // if (!isset($authData[0]) || !isset($authData[1])) // return 403; // $user = User::where('email', $authData[0]) // ->where('password', $authData[1]) // ->first(); // if (!$user) { // //abort(500, __('Token error')); // //return ApiResponse::apiResponse(500,"请求异常"); // return 404; // } // // return $user; // } }