# Install Sinatra: gem install sinatra require_relative "initialize_database" require_relative "database_queries" require_relative "cryptography" require 'sinatra' require 'json' require 'sqlite3' require 'jwt' payload = { data: {time: 'now', help: 'no'}.to_json, test: 'hello' } hmac_secret = 'my$ecretK3y' token = JWT.encode payload, hmac_secret, 'HS256' #puts token begin decoded_token = JWT.decode token, hmac_secret, true, { algorithm: 'HS256' } puts "Token is valid!" puts "Decoded token: #{decoded_token}" puts data_value = decoded_token.first['data'] puts test_value = decoded_token.first['test'] rescue JWT::DecodeError puts "Invalid token or signature!" end #puts decoded_token initialize_database post '/auth/login' do content_type :json username = params[:username] password = params[:password] unless check_if_user_exists username status 401 return { jwt: "Unuthorized Access" }.to_json end user_id = get_user_id username unless check_password_for_user(user_id, password) status 401 return { jwt: "Unuthorized Access" }.to_json end { jwt: "Logged in" }.to_json end def get_jwt (username, expiry_time) get_claims username end def get_claims (username) puts "Getting claims for #{username}" db = SQLite3::Database.new('./database/auth.db') results = db.execute(' SELECT C.claim FROM users U INNER JOIN user_claims UC ON U.id = UC.user_id INNER JOIN claims C ON UC.claim_id = U.id WHERE u.username = ? ', username) if results.empty? puts 'No claims found.' else results.each do |column| puts "#{column[0]}" end end return results end # Run the application # ruby your_file_name.rb