Class: BetterAuth::Adapters::InternalAdapter
- Inherits:
-
Object
- Object
- BetterAuth::Adapters::InternalAdapter
- Defined in:
- lib/better_auth/adapters/internal_adapter.rb
Instance Attribute Summary collapse
-
#adapter ⇒ Object
readonly
Returns the value of attribute adapter.
-
#hooks ⇒ Object
readonly
Returns the value of attribute hooks.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
Instance Method Summary collapse
- #count_total_users(where: nil) ⇒ Object
- #create_account(account) ⇒ Object
- #create_oauth_user(user, account) ⇒ Object
- #create_session(user_id, dont_remember_me = false, override = nil, override_all = false, context = nil) ⇒ Object
- #create_user(user) ⇒ Object
- #create_verification_value(data) ⇒ Object
- #delete_account(account_id) ⇒ Object
- #delete_accounts(user_id) ⇒ Object
- #delete_session(token) ⇒ Object
- #delete_sessions(user_id_or_tokens) ⇒ Object
- #delete_user(user_id) ⇒ Object
- #delete_verification_by_identifier(identifier) ⇒ Object
- #delete_verification_value(id) ⇒ Object
- #find_account(account_id) ⇒ Object
- #find_account_by_provider_id(account_id, provider_id) ⇒ Object
- #find_account_by_user_id(user_id) ⇒ Object
- #find_accounts(user_id) ⇒ Object
- #find_oauth_user(email, account_id, provider_id) ⇒ Object
- #find_session(token) ⇒ Object
- #find_sessions(tokens) ⇒ Object
- #find_user_by_email(email, include_accounts: false) ⇒ Object
- #find_user_by_id(user_id) ⇒ Object
- #find_verification_value(identifier) ⇒ Object
-
#initialize(adapter, options) ⇒ InternalAdapter
constructor
A new instance of InternalAdapter.
- #link_account(account) ⇒ Object
- #list_sessions(user_id) ⇒ Object
- #list_users(limit: nil, offset: nil, sort_by: nil, where: nil) ⇒ Object
- #update_account(id, data) ⇒ Object
- #update_password(user_id, password) ⇒ Object
- #update_session(token, session) ⇒ Object
- #update_user(user_id, data) ⇒ Object
- #update_user_by_email(email, data) ⇒ Object
- #update_verification_value(id, data) ⇒ Object
Constructor Details
#initialize(adapter, options) ⇒ InternalAdapter
Returns a new instance of InternalAdapter.
12 13 14 15 16 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 12 def initialize(adapter, ) @adapter = adapter @options = @hooks = DatabaseHooks.new(adapter, ) end |
Instance Attribute Details
#adapter ⇒ Object (readonly)
Returns the value of attribute adapter.
10 11 12 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 10 def adapter @adapter end |
#hooks ⇒ Object (readonly)
Returns the value of attribute hooks.
10 11 12 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 10 def hooks @hooks end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
10 11 12 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 10 def @options end |
Instance Method Details
#count_total_users(where: nil) ⇒ Object
57 58 59 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 57 def count_total_users(where: nil) adapter.count(model: "user", where: where || []) end |
#create_account(account) ⇒ Object
32 33 34 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 32 def create_account(account) hooks.create(.merge(stringify_keys(account)), "account") end |
#create_oauth_user(user, account) ⇒ Object
18 19 20 21 22 23 24 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 18 def create_oauth_user(user, account) adapter.transaction do created_user = create_user(user) created_account = create_account(stringify_keys(account).merge("userId" => created_user["id"])) {user: created_user, account: created_account} end end |
#create_session(user_id, dont_remember_me = false, override = nil, override_all = false, context = nil) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 67 def create_session(user_id, dont_remember_me = false, override = nil, override_all = false, context = nil) override = stringify_keys(override || {}) token = override.delete("token") || SecureRandom.hex(16) base = { "ipAddress" => "", "userAgent" => "", "expiresAt" => Time.now + (dont_remember_me ? 86_400 : .session[:expires_in].to_i), "userId" => user_id, "token" => token }.merge() data = override_all ? base.merge(override) : override.merge(base) custom = secondary_storage && lambda do |session_data| actual_session = apply_schema_create("session", session_data) store_session(actual_session) actual_session end execute_main = !secondary_storage || .session[:store_session_in_database] created = hooks.create(data, "session", custom: custom, context: context) adapter.create(model: "session", data: data, force_allow_id: true) if secondary_storage && execute_main created end |
#create_user(user) ⇒ Object
26 27 28 29 30 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 26 def create_user(user) data = .merge(stringify_keys(user)) data["email"] = data["email"].to_s.downcase if data["email"] hooks.create(data, "user") end |
#create_verification_value(data) ⇒ Object
228 229 230 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 228 def create_verification_value(data) hooks.create(.merge(stringify_keys(data)), "verification") end |
#delete_account(account_id) ⇒ Object
158 159 160 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 158 def delete_account(account_id) hooks.delete([{field: "id", value: account_id}], "account") end |
#delete_accounts(user_id) ⇒ Object
154 155 156 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 154 def delete_accounts(user_id) hooks.delete_many([{field: "userId", value: user_id}], "account") end |
#delete_session(token) ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 123 def delete_session(token) if secondary_storage data = parse_storage(secondary_storage.get(token)) if data && data["session"] user_id = data["session"]["userId"] entries = active_session_entries(user_id).reject { |entry| entry["token"] == token } write_active_sessions(user_id, entries) end secondary_storage.delete(token) return if !.session[:store_session_in_database] || .session[:preserve_session_in_database] end hooks.delete([{field: "token", value: token}], "session") end |
#delete_sessions(user_id_or_tokens) ⇒ Object
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 138 def delete_sessions(user_id_or_tokens) if secondary_storage if user_id_or_tokens.is_a?(Array) user_id_or_tokens.each { |token| secondary_storage.delete(token) } else active_session_entries(user_id_or_tokens).each { |entry| secondary_storage.delete(entry["token"]) } secondary_storage.delete(active_key(user_id_or_tokens)) end return if !.session[:store_session_in_database] || .session[:preserve_session_in_database] end field = user_id_or_tokens.is_a?(Array) ? "token" : "userId" operator = user_id_or_tokens.is_a?(Array) ? "in" : nil hooks.delete_many([{field: field, value: user_id_or_tokens, operator: operator}], "session") end |
#delete_user(user_id) ⇒ Object
61 62 63 64 65 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 61 def delete_user(user_id) delete_sessions(user_id) if !secondary_storage || .session[:store_session_in_database] hooks.delete_many([{field: "userId", value: user_id}], "account") hooks.delete([{field: "id", value: user_id}], "user") end |
#delete_verification_by_identifier(identifier) ⇒ Object
247 248 249 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 247 def delete_verification_by_identifier(identifier) hooks.delete([{field: "identifier", value: identifier}], "verification") end |
#delete_verification_value(id) ⇒ Object
243 244 245 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 243 def delete_verification_value(id) hooks.delete([{field: "id", value: id}], "verification") end |
#find_account(account_id) ⇒ Object
212 213 214 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 212 def find_account(account_id) adapter.find_one(model: "account", where: [{field: "accountId", value: account_id}]) end |
#find_account_by_provider_id(account_id, provider_id) ⇒ Object
216 217 218 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 216 def find_account_by_provider_id(account_id, provider_id) adapter.find_one(model: "account", where: [{field: "accountId", value: account_id}, {field: "providerId", value: provider_id}]) end |
#find_account_by_user_id(user_id) ⇒ Object
220 221 222 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 220 def find_account_by_user_id(user_id) find_accounts(user_id) end |
#find_accounts(user_id) ⇒ Object
208 209 210 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 208 def find_accounts(user_id) adapter.find_many(model: "account", where: [{field: "userId", value: user_id}]) end |
#find_oauth_user(email, account_id, provider_id) ⇒ Object
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 162 def find_oauth_user(email, account_id, provider_id) account = find_account_with_user(account_id, provider_id) if account user = account["user"] || adapter.find_one(model: "user", where: [{field: "email", value: email.to_s.downcase}]) return nil unless user linked = account.dup linked.delete("user") return {user: user, linked_account: linked, accounts: [linked]} end found_user = adapter.find_one(model: "user", where: [{field: "email", value: email.to_s.downcase}]) return nil unless found_user {user: found_user, linked_account: nil, accounts: find_accounts(found_user["id"])} end |
#find_session(token) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 90 def find_session(token) if secondary_storage data = parse_storage(secondary_storage.get(token)) return nil unless data return { session: normalize_session_dates(data["session"]), user: normalize_user_dates(data["user"]) } end found = find_session_with_user(token) return nil unless found && found["user"] user = found.delete("user") {session: found, user: user} end |
#find_sessions(tokens) ⇒ Object
108 109 110 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 108 def find_sessions(tokens) tokens.filter_map { |token| find_session(token) } end |
#find_user_by_email(email, include_accounts: false) ⇒ Object
179 180 181 182 183 184 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 179 def find_user_by_email(email, include_accounts: false) user = adapter.find_one(model: "user", where: [{field: "email", value: email.to_s.downcase}]) return nil unless user {user: user, accounts: include_accounts ? find_accounts(user["id"]) : []} end |
#find_user_by_id(user_id) ⇒ Object
186 187 188 189 190 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 186 def find_user_by_id(user_id) return nil if user_id.to_s.empty? adapter.find_one(model: "user", where: [{field: "id", value: user_id}]) end |
#find_verification_value(identifier) ⇒ Object
232 233 234 235 236 237 238 239 240 241 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 232 def find_verification_value(identifier) values = adapter.find_many( model: "verification", where: [{field: "identifier", value: identifier}], sort_by: {field: "createdAt", direction: "desc"}, limit: 1 ) hooks.delete_many([{field: "expiresAt", value: Time.now, operator: "lt"}], "verification") unless .verification[:disable_cleanup] values.first end |
#link_account(account) ⇒ Object
36 37 38 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 36 def link_account(account) create_account(account) end |
#list_sessions(user_id) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 40 def list_sessions(user_id) if secondary_storage active_session_entries(user_id).filter_map do |entry| data = parse_storage(secondary_storage.get(entry.fetch("token"))) next unless data && data["session"] normalize_session_dates(data["session"]) end else adapter.find_many(model: "session", where: [{field: "userId", value: user_id}]) end end |
#list_users(limit: nil, offset: nil, sort_by: nil, where: nil) ⇒ Object
53 54 55 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 53 def list_users(limit: nil, offset: nil, sort_by: nil, where: nil) adapter.find_many(model: "user", where: where || [], limit: limit, offset: offset, sort_by: sort_by) end |
#update_account(id, data) ⇒ Object
224 225 226 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 224 def update_account(id, data) hooks.update(stringify_keys(data), [{field: "id", value: id}], "account") end |
#update_password(user_id, password) ⇒ Object
204 205 206 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 204 def update_password(user_id, password) hooks.update_many({password: password}, [{field: "userId", value: user_id}, {field: "providerId", value: "credential"}], "account") end |
#update_session(token, session) ⇒ Object
112 113 114 115 116 117 118 119 120 121 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 112 def update_session(token, session) data = stringify_keys(session) if secondary_storage return hooks.update(data, [{field: "token", value: token}], "session", custom: lambda { |actual_data| update_stored_session(token, actual_data) }) end hooks.update(data, [{field: "token", value: token}], "session") end |
#update_user(user_id, data) ⇒ Object
192 193 194 195 196 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 192 def update_user(user_id, data) user = hooks.update(stringify_keys(data), [{field: "id", value: user_id}], "user") refresh_user_sessions(user) if user user end |
#update_user_by_email(email, data) ⇒ Object
198 199 200 201 202 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 198 def update_user_by_email(email, data) user = hooks.update(stringify_keys(data), [{field: "email", value: email.to_s.downcase}], "user") refresh_user_sessions(user) if user user end |
#update_verification_value(id, data) ⇒ Object
251 252 253 |
# File 'lib/better_auth/adapters/internal_adapter.rb', line 251 def update_verification_value(id, data) hooks.update(stringify_keys(data), [{field: "id", value: id}], "verification") end |