roysathome.net/auth/auth.rb

82 lines
1.7 KiB
Ruby

# 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: 'test', test: 'hello' }
hmac_secret = 'my$ecretK3y'
token = JWT.encode payload, hmac_secret, 'HS256'
#puts token
decoded_token = JWT.decode token, hmac_secret, true, { algorithm: 'HS256' }
#puts decoded_token
initialize_database
# Define a simple API endpoint
get '/api/greeting' do
content_type :json
{ greeting: 'Hello, World!' }.to_json
end
get '/api/greeting/:name' do
get_claims params[:name]
content_type :json
{ greeting: "Hello, #{params[:name]}!" }.to_json
end
post '/auth/login' do
username = params[:username]
password = params[:password]
request_hashed_password = hash_password password
user_id = get_user_id username
hashed_password = get_user_hashed_password user_id
puts hashed_password
puts request_hashed_password
unless hashed_password == request_hashed_password
status 401
'Unauthorized Access'
end
content_type :json
{ 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