97 lines
2.4 KiB
Ruby
Executable File
97 lines
2.4 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
require "pry"
|
|
# require "sinatra"
|
|
require "sinatra/cookies"
|
|
require "sinatra/base"
|
|
require "sinatra/namespace"
|
|
require "slim"
|
|
require "bcrypt"
|
|
require "jwt"
|
|
require "sequel"
|
|
require "json"
|
|
require "doc_my_routes"
|
|
require "rack/csrf"
|
|
require "securerandom"
|
|
|
|
require_relative "./utils/url.rb"
|
|
|
|
module LifePex
|
|
DB = Sequel.connect ARGV[0] || ENV["LIFEPEX_DB"] || "sqlite://sqlite.db"
|
|
BASE_URL = ARGV[1] || ENV["LIFEPEX_BASE_URL"] || "http://localhost:4567"
|
|
SECRET = ENV.fetch('LIFEPEX_SECRET') do
|
|
STDERR.puts "WARNING: LIFEPEX_SECRET will be randomly generated as a fallback"
|
|
SecureRandom.hex(64)
|
|
end
|
|
if SECRET.size < 8
|
|
STDERR.puts "ERROR: Your secret is NOT very secret, fix this (at least 8 hexadigits entropy)"
|
|
exit 1
|
|
end
|
|
|
|
CODE_VERSION = DB[:meta].first[:code_version]
|
|
CODE_DATE = DB[:meta].first[:code_date]
|
|
include LifePex::Utils::Url
|
|
|
|
module Systems
|
|
end
|
|
end
|
|
|
|
require_relative "./utils/json_api.rb"
|
|
require_relative "./utils/string.rb"
|
|
|
|
require_relative "./achievements/dsl.rb"
|
|
require_relative "./achievements/achievement.rb"
|
|
|
|
require_relative "./models/level.rb"
|
|
require_relative "./models/user.rb"
|
|
require_relative "./models/pex.rb"
|
|
require_relative "./models/user_pex.rb"
|
|
require_relative "./models/achievement.rb"
|
|
|
|
require_relative "./systems/csrf.rb"
|
|
require_relative "./systems/api_list.rb"
|
|
require_relative "./systems/auth.rb"
|
|
require_relative "./systems/user.rb"
|
|
require_relative "./systems/pex.rb"
|
|
require_relative "./systems/pex2.rb"
|
|
require_relative "./systems/achievement.rb"
|
|
|
|
class LifePex::Systems::PublicSystem < Sinatra::Base
|
|
set :public_folder, 'public'
|
|
end
|
|
|
|
class LifePex::Systems::BaseSystem < Sinatra::Base
|
|
DocMyRoutes.configure do |config|
|
|
config.title = "LifePex"
|
|
config.description = "LifePex JSON REST API documentation"
|
|
end
|
|
|
|
set :session_secret, LifePex::SECRET
|
|
enable :sessions
|
|
|
|
use Rack::Csrf, :skip => ['*:/api/*']
|
|
|
|
use LifePex::Systems::AuthSystem
|
|
use LifePex::Systems::PublicSystem
|
|
use LifePex::Systems::UserSystem
|
|
use LifePex::Systems::PexSystem
|
|
use LifePex::Systems::Pex2System
|
|
use LifePex::Systems::Achievement
|
|
|
|
include JSON::API
|
|
not_found do
|
|
if accept_json?
|
|
{ message: "No route or entity \"#{request.path}\" found" }.to_json
|
|
else
|
|
raise
|
|
end
|
|
end
|
|
|
|
get "/api/meta/v1", provides: 'json' do
|
|
LifePex::Systems::ApiList.get_all_api_routes.to_json
|
|
end
|
|
|
|
set :bind, ENV["LIFEPEX_BIND"] || "127.0.0.1"
|
|
run! if app_file == $0
|
|
end
|