summaryrefslogtreecommitdiff
path: root/app/validators
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-02-09 18:06:55 +0100
committerJames Edwards-Jones <jedwardsjones@gitlab.com>2017-01-31 22:53:57 +0000
commit5f7257c27dace1dcb9d3eb4732caf68f061a8d68 (patch)
treea00cfa51f1aa44ae3592d49c3232795d21d3fae4 /app/validators
parentc4c8ca04052aaf7d37c2335066381b536df68427 (diff)
downloadgitlab-ce-5f7257c27dace1dcb9d3eb4732caf68f061a8d68.tar.gz
Initial work on GitLab Pages update
Diffstat (limited to 'app/validators')
-rw-r--r--app/validators/certificate_key_validator.rb24
-rw-r--r--app/validators/certificate_validator.rb30
2 files changed, 54 insertions, 0 deletions
diff --git a/app/validators/certificate_key_validator.rb b/app/validators/certificate_key_validator.rb
new file mode 100644
index 00000000000..3b5bd30db1a
--- /dev/null
+++ b/app/validators/certificate_key_validator.rb
@@ -0,0 +1,24 @@
+# UrlValidator
+#
+# Custom validator for private keys.
+#
+# class Project < ActiveRecord::Base
+# validates :certificate_key, certificate_key: true
+# end
+#
+class CertificateKeyValidator < ActiveModel::EachValidator
+ def validate_each(record, attribute, value)
+ unless valid_private_key_pem?(value)
+ record.errors.add(attribute, "must be a valid PEM private key")
+ end
+ end
+
+ private
+
+ def valid_private_key_pem?(value)
+ pkey = OpenSSL::PKey::RSA.new(value)
+ pkey.private?
+ rescue OpenSSL::PKey::PKeyError
+ false
+ end
+end
diff --git a/app/validators/certificate_validator.rb b/app/validators/certificate_validator.rb
new file mode 100644
index 00000000000..2cba5a435b7
--- /dev/null
+++ b/app/validators/certificate_validator.rb
@@ -0,0 +1,30 @@
+# UrlValidator
+#
+# Custom validator for private keys.
+#
+# class Project < ActiveRecord::Base
+# validates :certificate_key, certificate_key: true
+# end
+#
+class CertificateValidator < ActiveModel::EachValidator
+ def validate_each(record, attribute, value)
+ certificate = parse_certificate(value)
+ unless certificate
+ record.errors.add(attribute, "must be a valid PEM certificate")
+ end
+
+ if options[:intermediates]
+ unless certificate
+ record.errors.add(attribute, "certificate verification failed: missing intermediate certificates")
+ end
+ end
+ end
+
+ private
+
+ def parse_certificate(value)
+ OpenSSL::X509::Certificate.new(value)
+ rescue OpenSSL::X509::CertificateError
+ nil
+ end
+end