require "sinatra" require "json" require_relative "players" require_relative "session" json_path = File.expand_path("db.json") signed_in_users = JSON.parse(File.read(json_path))["signed_in_users"] set :public_folder, "public" get "/" do send_file "index.html" end get "/debug" do return get_session_all(request, response).inspect end post "/new_player" do data = JSON.parse(request.body.read) if data["email"].nil? || data["pass"].nil? || data["username"].nil? status 400 return '{"message": "Bad request made!"}' end player = Players.mk_player(data["username"], data["email"], data["pass"]) case player when "Successfully registered!" hash = XXhash.xxh64(data["email"] + Time.now.to_s, 1234) code = "" while hash.positive? code << ALPHANUM[hash % 64] hash /= 64 end code = code.reverse.rjust(12, "0") set_session(request, response, "user", code) signed_in_users[code] = data["email"] json = JSON.parse(File.read(json_path)) json["signed_in_users"] = signed_in_users.clone File.write(json_path, JSON.pretty_generate(json)) status 200 else status 400 end return "{\"message\": \"#{player}\"}" end get "/verify/:code" do if Players.verify(params[:code]) status 200 return "{\"message\": \"Verified successfully!\"}" else status 400 return "{\"message\": \"Used or Invalid code!\"}" end end post "/login" do data = JSON.parse(request.body.read) player = Players.authorized?(data["email"], data["pass"]) if player hash = XXhash.xxh64(data["email"] + Time.now.to_s, 1234) code = "" while hash.positive? code << ALPHANUM[hash % 64] hash /= 64 end code = code.reverse.rjust(12, "0") set_session(request, response, "user", code) signed_in_users[code] = data["email"] json = JSON.parse(File.read(json_path)) json["signed_in_users"] = signed_in_users.clone File.write(json_path, JSON.pretty_generate(json)) status 200 return "{\"message\": \"Remember to verify your email!\"}" unless Players.verified?(data["email"]) return "{\"message\": \"Signed in successfully!\"}" else status 400 return "{\"message\": \"Email or password incorrect!\"}" end end post "/logout" do uid = get_session(request, response, "user") if signed_in_users[uid].nil? status 400 return "{\"message\":\"Not signed in!\"}" end signed_in_users.delete(uid) rm_session(request, response, "user") json = JSON.parse(File.read(json_path)) json["signed_in_users"] = signed_in_users.clone File.write(json_path, JSON.pretty_generate(json)) status 200 return "{\"message\":\"Signed out!\"}" end post "/forgot_password" do data = JSON.parse(request.body.read) if data["email"].nil? status 400 return "{\"message\":\"Bad request made!\"}" end Players.pass_req(data["email"]) status 200 return "{\"message\":\"Password reset email sent!\"}" end post "/reset_password/:code" do data = JSON.parse(request.body.read) if data["pass"].nil? || params[:code].nil? status 400 return "{\"message\":\"Bad request made!\"}" end if Players.pass_reset(data["pass"], params[:code]) status 200 return "{\"message\":\"Password reset successfully!\"}" else status 400 return "{\"message\":\"Couldn\'t reset password!\"}" end end delete "/rm_player" do uid = get_session(request, response, "user") if uid.nil? || signed_in_users[uid].nil? status 400 return '{"message": "Not signed in!"}' end if Players.rm_player(signed_in_users[uid]) status 200 signed_in_users.delete(uid) rm_session(request, response, "user") json = JSON.parse(File.read(json_path)) json["signed_in_users"] = signed_in_users.clone File.write(json_path, JSON.pretty_generate(json)) return '{"message": "Sorry to see you go.."}' else status 500 return '{"message": "Couldn\'t delete!"}' end end