84 lines
1.7 KiB
Ruby
84 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: {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
|