|
|
|
#!/usr/bin/ruby
|
|
|
|
|
|
|
|
require "sinatra"
|
|
|
|
require "slim"
|
|
|
|
|
|
|
|
load "db_parse.rb"
|
|
|
|
|
|
|
|
DEFAULT_AVATAR = "https://robohash.org/innonaut.png?size=50x50&set=set1"
|
|
|
|
|
|
|
|
enable :sessions
|
|
|
|
|
|
|
|
db_cache = get_db() # get all the parsed data
|
|
|
|
|
|
|
|
user_creds = {}
|
|
|
|
user_avatars = Hash.new(DEFAULT_AVATAR)
|
|
|
|
|
|
|
|
get "/" do
|
|
|
|
session[:msg] = nil
|
|
|
|
slim(:person, locals: {persondata: db_cache})
|
|
|
|
end
|
|
|
|
|
|
|
|
get "/loginpage" do
|
|
|
|
slim(:login)
|
|
|
|
end
|
|
|
|
|
|
|
|
get "/registerpage" do
|
|
|
|
slim(:register)
|
|
|
|
end
|
|
|
|
|
|
|
|
post "/register" do
|
|
|
|
userstring = params[:username].chomp.gsub(" ", "")
|
|
|
|
if( userstring.length < 3 ) then
|
|
|
|
session[:msg] = "Invalid username. Minimum chars=3"
|
|
|
|
redirect "/registerpage"
|
|
|
|
end
|
|
|
|
|
|
|
|
username = userstring.to_sym
|
|
|
|
if( user_creds[username] == nil ) then
|
|
|
|
if( params[:password] == params[:password2] ) then
|
|
|
|
user_creds[username] = params[:password]
|
|
|
|
# user_avatars[username] = DEFAULT_AVATAR
|
|
|
|
session[:msg] = "Account created."
|
|
|
|
redirect "/loginpage"
|
|
|
|
else
|
|
|
|
session[:msg] = "Password does not match, please rewrite password."
|
|
|
|
redirect "/registerpage"
|
|
|
|
end
|
|
|
|
else
|
|
|
|
session[:msg] = "Username in use. Please pick another."
|
|
|
|
redirect "/registerpage"
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
post "/login" do
|
|
|
|
username = params[:username]
|
|
|
|
password = params[:password]
|
|
|
|
|
|
|
|
if( user_creds[username.to_sym] == password ) then
|
|
|
|
session[:username] = username
|
|
|
|
session[:avatar] = user_avatars[username]
|
|
|
|
session[:msg] = "Login success."
|
|
|
|
redirect "/"
|
|
|
|
else
|
|
|
|
session[:msg] = "Login failed."
|
|
|
|
redirect "/loginpage"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
get "/profile" do
|
|
|
|
session[:msg] = nil
|
|
|
|
if(session[:username] != nil) then
|
|
|
|
slim(:profile)
|
|
|
|
else
|
|
|
|
session[:msg] = "Please login to view your profile."
|
|
|
|
redirect "/login"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
post "/updateavatar" do
|
|
|
|
if( session[:username] != nil ) then
|
|
|
|
if(params[:avatar_url] != "" && params[:avatar_url] != nil) then
|
|
|
|
user_avatars[session[:username].to_s] = params[:avatar_url]
|
|
|
|
session[:avatar] = params[:avatar_url]
|
|
|
|
redirect "/profile"
|
|
|
|
end
|
|
|
|
else
|
|
|
|
session[:msg] = "You need to login to update your avatar."
|
|
|
|
redirect "/"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
post "/logout" do
|
|
|
|
session[:username] = nil
|
|
|
|
redirect "/"
|
|
|
|
end
|
|
|
|
|
|
|
|
get "/calc" do
|
|
|
|
slim(:calc)
|
|
|
|
end
|
|
|
|
|
|
|
|
post "/calculate" do
|
|
|
|
result = 0
|
|
|
|
num1 = params[:number1].to_f
|
|
|
|
num2 = params[:number2].to_f
|
|
|
|
op = params[:op]
|
|
|
|
|
|
|
|
begin
|
|
|
|
case op
|
|
|
|
when "+"
|
|
|
|
result = num1 + num2
|
|
|
|
when "-"
|
|
|
|
result = num1 - num2
|
|
|
|
when "*"
|
|
|
|
result = num1 * num2
|
|
|
|
when "/"
|
|
|
|
result = num1 / num2
|
|
|
|
end
|
|
|
|
|
|
|
|
rescue ZeroDivisionError
|
|
|
|
result = "inf"
|
|
|
|
end
|
|
|
|
|
|
|
|
session[:calc_result] = result
|
|
|
|
session[:history] = session[:history] || []
|
|
|
|
session[:history] << {
|
|
|
|
number1: num1,
|
|
|
|
number2: num2,
|
|
|
|
op: op,
|
|
|
|
result: result
|
|
|
|
}
|
|
|
|
redirect "/calc"
|
|
|
|
end
|