Files
sure/app/models/invite_code.rb
soky srm 696ff0966b Initial security fixes (#461)
* Initial sec

* Update PII fields

* FIX add tests

* FIX safely read plaintext data on rake backfill

* Update user.rb

* FIX tests

* encryption_ready? block

* Test conditional to encryption on

---------

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
2026-01-23 22:05:28 +01:00

33 lines
634 B
Ruby

class InviteCode < ApplicationRecord
include Encryptable
# Encrypt token if ActiveRecord encryption is configured
if encryption_ready?
encrypts :token, deterministic: true, downcase: true
end
before_validation :generate_token, on: :create
class << self
def claim!(token)
if invite_code = find_by(token: token&.downcase)
invite_code.destroy!
true
end
end
def generate!
create!.token
end
end
private
def generate_token
loop do
self.token = SecureRandom.hex(4)
break token unless self.class.exists?(token: token)
end
end
end