[ TonTon Auth ]

This commit is contained in:
Mateus Cezário Barreto 2025-11-06 11:25:41 -03:00
commit 7085e69bb6
3 changed files with 163 additions and 1 deletions

73
lib/tonton_web/auth.rb Normal file
View file

@ -0,0 +1,73 @@
require 'pathname'
require 'sqlite3'
require 'bcrypt'
module TonTonWeb
User = Struct.new(:id, :name, :username, :email, :password_digest)
class Auth
attr_reader :root
def initialize root_path
@root = Pathname.new root_path
@db = SQLite3::Database.new(@root+ 'database.sqlite')
end
def create_tables
@db.execute "create table users (id integer primary key, name text, username text, email text, password_digest text);"
end
def create_user **options
name = options.fetch :name
username = options.fetch :username
email = options.fetch :email
password = options.fetch :password
# Assert user doesn't exists
hashed_password = BCrypt::Password.create(password)
@db.execute(
"insert into users (name, username, email, password_digest) values (?,?,?,?);",
[name, username, email, password]
)
return # Return user
end
def delete_user id
@db.execute "delete from users where id = ?;", id
end
def find_user **options
name = options[:name]
username = options[:username]
email = options[:email]
if not (name or username or email)
raise "No options to find user."
end
user = nil
user_query_template = "select id, name, username, email, password_digest from users where name = ? or username = ? or email = ?"
@db.execute(user_query_template, [name, username, email]) do |row|
user = TonTonWeb::User.new(*row)
end
return user
end
def authenticate username, password
user = find_user(username: username)
if BCrypt::Password.new(user.password_digest) == password
return user
else
return false
end
end
end
end