summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/services/emails/base_service.rb15
-rw-r--r--app/services/emails/create_service.rb9
-rw-r--r--app/services/emails/destroy_service.rb9
3 files changed, 33 insertions, 0 deletions
diff --git a/app/services/emails/base_service.rb b/app/services/emails/base_service.rb
new file mode 100644
index 00000000000..0f8617c08bb
--- /dev/null
+++ b/app/services/emails/base_service.rb
@@ -0,0 +1,15 @@
+module Emails
+ class BaseService
+ def initialize(current_user, user, opts)
+ @current_user = current_user
+ @user = user
+ @email = opts[:email]
+ end
+
+ private
+
+ def can_manage_emails?
+ @current_user == @user || @current_user.admin?
+ end
+ end
+end
diff --git a/app/services/emails/create_service.rb b/app/services/emails/create_service.rb
new file mode 100644
index 00000000000..5d5655256fa
--- /dev/null
+++ b/app/services/emails/create_service.rb
@@ -0,0 +1,9 @@
+module Emails
+ class CreateService < BaseService
+ def execute(skip_authorization: false)
+ raise Gitlab::Access::AccessDeniedError unless skip_authorization || can_manage_emails?
+
+ @user.emails.create!(email: @email)
+ end
+ end
+end
diff --git a/app/services/emails/destroy_service.rb b/app/services/emails/destroy_service.rb
new file mode 100644
index 00000000000..5080c08c473
--- /dev/null
+++ b/app/services/emails/destroy_service.rb
@@ -0,0 +1,9 @@
+module Emails
+ class DestroyService < BaseService
+ def execute(skip_authorization: false)
+ raise Gitlab::Access::AccessDeniedError unless skip_authorization || can_manage_emails?
+
+ Email.find_by_email(@email).destroy!
+ end
+ end
+end