36 lines
737 B
Ruby
36 lines
737 B
Ruby
|
class GpgKey < ActiveRecord::Base
|
||
|
KEY_PREFIX = '-----BEGIN PGP PUBLIC KEY BLOCK-----'.freeze
|
||
|
|
||
|
belongs_to :user
|
||
|
|
||
|
validates :fingerprint,
|
||
|
presence: true,
|
||
|
uniqueness: true
|
||
|
|
||
|
validates :key,
|
||
|
presence: true,
|
||
|
uniqueness: true,
|
||
|
format: {
|
||
|
with: /\A#{KEY_PREFIX}((?!#{KEY_PREFIX}).)+\Z/m
|
||
|
}
|
||
|
|
||
|
before_validation :extract_fingerprint
|
||
|
|
||
|
def key=(value)
|
||
|
value.strip! unless value.blank?
|
||
|
write_attribute(:key, value)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def extract_fingerprint
|
||
|
import = GPGME::Key.import(key)
|
||
|
|
||
|
return if import.considered == 0
|
||
|
|
||
|
# we can assume that the result only contains one item as the validation
|
||
|
# only allows one key
|
||
|
self.fingerprint = import.imports.first.fingerprint
|
||
|
end
|
||
|
end
|