Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/incoming_email.rb')
-rw-r--r--lib/gitlab/incoming_email.rb43
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/gitlab/incoming_email.rb b/lib/gitlab/incoming_email.rb
new file mode 100644
index 00000000000..856ccc71084
--- /dev/null
+++ b/lib/gitlab/incoming_email.rb
@@ -0,0 +1,43 @@
+module Gitlab
+ module IncomingEmail
+ class << self
+ def enabled?
+ config.enabled && address_formatted_correctly?
+ end
+
+ def address_formatted_correctly?
+ config.address &&
+ config.address.include?("%{key}")
+ end
+
+ def reply_address(key)
+ config.address.gsub('%{key}', key)
+ end
+
+ def key_from_address(address)
+ regex = address_regex
+ return unless regex
+
+ match = address.match(regex)
+ return unless match
+
+ match[1]
+ end
+
+ private
+
+ def config
+ Gitlab.config.incoming_email
+ end
+
+ def address_regex
+ wildcard_address = config.address
+ return nil unless wildcard_address
+
+ regex = Regexp.escape(wildcard_address)
+ regex = regex.gsub(Regexp.escape('%{key}'), "(.+)")
+ Regexp.new(regex).freeze
+ end
+ end
+ end
+end