summaryrefslogtreecommitdiff
path: root/users/app/models/pgp_key.rb
diff options
context:
space:
mode:
authorjessib <jessib@riseup.net>2013-12-02 11:56:04 -0800
committerjessib <jessib@riseup.net>2013-12-02 11:56:04 -0800
commit2a2ffd46bf4e6009f2957fb4e4abdedbfa7e3245 (patch)
tree41dd790266aaa951dfa35889527f78015f8c4451 /users/app/models/pgp_key.rb
parent8e9b65b01bbd9d44d4077d94f2dc4ac375cf8e85 (diff)
parent8de6f143e53af5287b41913dcf3c7969f452fbc9 (diff)
Merge branch 'develop' into feature/service_level
Diffstat (limited to 'users/app/models/pgp_key.rb')
-rw-r--r--users/app/models/pgp_key.rb48
1 files changed, 48 insertions, 0 deletions
diff --git a/users/app/models/pgp_key.rb b/users/app/models/pgp_key.rb
new file mode 100644
index 0000000..66f8660
--- /dev/null
+++ b/users/app/models/pgp_key.rb
@@ -0,0 +1,48 @@
+class PgpKey
+ include ActiveModel::Validations
+
+ KEYBLOCK_IDENTIFIERS = [
+ '-----BEGIN PGP PUBLIC KEY BLOCK-----',
+ '-----END PGP PUBLIC KEY BLOCK-----',
+ ]
+
+ # mostly for testing.
+ attr_accessor :keyblock
+
+ validate :validate_keyblock_format
+
+ def initialize(keyblock = nil)
+ @keyblock = keyblock
+ end
+
+ def to_s
+ @keyblock
+ end
+
+ def present?
+ @keyblock.present?
+ end
+
+ # allow comparison with plain keyblock strings.
+ def ==(other)
+ self.equal?(other) or
+ # relax the comparison on line ends.
+ self.to_s.tr_s("\n\r", '') == other.tr_s("\r\n", '')
+ end
+
+ protected
+
+ def validate_keyblock_format
+ if keyblock_identifier_missing?
+ errors.add :public_key_block,
+ "does not look like an armored pgp public key block"
+ end
+ end
+
+ def keyblock_identifier_missing?
+ KEYBLOCK_IDENTIFIERS.find do |identify|
+ !@keyblock.include?(identify)
+ end
+ end
+
+end