lib/authtown.rb in authtown-0.1.0 vs lib/authtown.rb in authtown-0.2.0
- old
+ new
@@ -3,50 +3,69 @@
require "bridgetown"
require "mail"
require "authtown/builder"
require "authtown/view_mixin"
-# REQUIRES:
-# init :"bridgetown-activerecord", sequel_support: :postgres
-
-# ActiveRecord schema:
+# rubocop:disable Layout/LineLength
+### Simple migration strategy:
#
-# class CreateUsers < ActiveRecord::Migration[7.0]
-# def change
-# create_table :users do |t|
-# t.string :email, null: false, index: { unique: true }
-# t.string :first_name
-# t.string :password_hash, null: false
-# t.timestamps
+# Sequel.migration do
+# change do
+# extension :date_arithmetic
+
+# create_table(:users) do
+# primary_key :id, type: :Bignum
+# citext :email, null: false
+# constraint :valid_email, email: /^[^,;@ \r\n]+@[^,@; \r\n]+\.[^,@; \r\n]+$/
+# String :first_name
+# String :password_hash, null: false
+# index :email, unique: true
# end
-# end
-# end
-#
-# class CreateAccountRememberKeys < ActiveRecord::Migration[7.0]
-# def change
-# create_table :account_remember_keys do |t|
-# t.foreign_key :users, column: :id
-# t.string :key, null: false
-# t.datetime :deadline, null: false
+
+# # Used by the remember me feature
+# create_table(:account_remember_keys) do
+# foreign_key :id, :users, primary_key: true, type: :Bignum
+# String :key, null: false
+# DateTime :deadline, { null: false, default: Sequel.date_add(Sequel::CURRENT_TIMESTAMP, days: 30) }
# end
+
+# create_table(:account_password_reset_keys) do
+# foreign_key :id, :users, primary_key: true, type: :Bignum
+# String :key, null: false
+# DateTime :deadline, { null: false, default: Sequel.date_add(Sequel::CURRENT_TIMESTAMP, days: 1) }
+# DateTime :email_last_sent, null: false, default: Sequel::CURRENT_TIMESTAMP
+# end
# end
# end
+# rubocop:enable Layout/LineLength
-class Authtown::Current < ActiveSupport::CurrentAttributes
- # @!parse def self.user = User.new
- attribute :user
+Thread.attr_accessor :authtown_state
+class Authtown::Current
+ class << self
+ def thread_state = Thread.current.authtown_state ||= {}
+
+ def user=(new_user)
+ thread_state[:user] = new_user
+ end
+
+ def user = thread_state[:user]
+ end
end
# rubocop:disable Metrics/BlockLength
# @param config [Bridgetown::Configuration::ConfigurationDSL]
# @param rodauth_config [Proc]
Bridgetown.initializer :authtown do |
config,
rodauth_config: nil,
- account_landing_page: "/account/profile"
+ account_landing_page: "/account/profile",
+ user_class_resolver: -> { User }
|
+ config.authtown ||= {}
+ config.authtown.user_class_resolver ||= user_class_resolver
+
config.only :server do
require "authtown/routes/rodauth"
# @param app [Class<Roda>]
config.roda do |app|
@@ -54,13 +73,15 @@
secret = ENV.fetch("RODA_SECRET_KEY")
app.plugin(:sessions, secret:)
app.plugin :rodauth do
- enable :login, :logout, :create_account, :remember, :reset_password
+ enable :login, :logout, :create_account, :remember, :reset_password, :internal_request
hmac_secret secret
+ base_url config.url
+
prefix "/auth"
login_redirect account_landing_page
create_account_redirect account_landing_page
logout_redirect "/"
@@ -90,10 +111,10 @@
before_create_account do
# Make sure timestamps get saved
account[:created_at] = account[:updated_at] = Time.now
- account[:first_name] = param(:first_name)
+ account[:first_name] = param(:first_name) if param(:first_name)
end
after_login do
remember_login
end