From d8265f091083bd662fec5b4a65a46c28538f90a9 Mon Sep 17 00:00:00 2001
From: Linjie Zhang <ljzhang@gitlab.cn>
Date: Wed, 30 Mar 2022 14:45:48 +0800
Subject: [PATCH] Add omniauth provider AliCloud

Changelog: added
---
 Gemfile                                          |   1 +
 Gemfile.lock                                     |   3 +++
 app/assets/images/auth_buttons/alicloud_64.png   | Bin 0 -> 3538 bytes
 app/helpers/auth_helper.rb                       |   1 +
 config/gitlab.yml.example                        |   6 ++++++
 lib/gitlab/auth/o_auth/provider.rb               |   1 +
 .../profiles/accounts_controller_spec.rb         |   2 +-
 spec/features/oauth_login_spec.rb                |   2 +-
 8 files changed, 14 insertions(+), 2 deletions(-)
 create mode 100644 app/assets/images/auth_buttons/alicloud_64.png

diff --git a/Gemfile b/Gemfile
index 65816b9a8339..cc3d93e3db9d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -41,6 +41,7 @@ gem 'omniauth-azure-activedirectory-v2', '~> 1.0'
 gem 'omniauth-azure-oauth2', '~> 0.0.9' # Deprecated v1 version
 gem 'omniauth-cas3', '~> 1.1.4'
 gem 'omniauth-dingtalk-oauth2', '~> 1.0'
+gem 'omniauth-alicloud', '~> 1.0.1'
 gem 'omniauth-facebook', '~> 4.0.0'
 gem 'omniauth-github', '~> 1.4'
 gem 'omniauth-gitlab', '~> 1.0.2'
diff --git a/Gemfile.lock b/Gemfile.lock
index dae55ebb0fd3..e53370f4ad75 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -829,6 +829,8 @@ GEM
     omniauth (1.9.1)
       hashie (>= 3.4.6)
       rack (>= 1.6.2, < 3)
+    omniauth-alicloud (1.0.1)
+      omniauth-oauth2 (~> 1.7.1)
     omniauth-atlassian-oauth2 (0.2.0)
       omniauth (>= 1.1.1)
       omniauth-oauth2 (>= 1.5)
@@ -1570,6 +1572,7 @@ DEPENDENCIES
   ohai (~> 16.10)
   oj (~> 3.10.6)
   omniauth (~> 1.8)
+  omniauth-alicloud (~> 1.0.1)
   omniauth-atlassian-oauth2 (~> 0.2.0)
   omniauth-auth0 (~> 2.0.0)
   omniauth-authentiq (~> 0.3.3)
diff --git a/app/assets/images/auth_buttons/alicloud_64.png b/app/assets/images/auth_buttons/alicloud_64.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd67a199e130369663ecf94cac649707c5e2dfe1
GIT binary patch
literal 3538
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
anQ4`{H5jlQwPj#nVDNPHb6Mw<&;$V9^ob1s

literal 0
HcmV?d00001

diff --git a/app/helpers/auth_helper.rb b/app/helpers/auth_helper.rb
index ba6c0380edf4..6ac4a12bcd5c 100644
--- a/app/helpers/auth_helper.rb
+++ b/app/helpers/auth_helper.rb
@@ -2,6 +2,7 @@
 
 module AuthHelper
   PROVIDERS_WITH_ICONS = %w(
+    alicloud
     atlassian_oauth2
     auth0
     authentiq
diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example
index 9ea6944de021..57106120fb2a 100644
--- a/config/gitlab.yml.example
+++ b/config/gitlab.yml.example
@@ -1035,6 +1035,9 @@ production: &base
     # arguments, followed by optional 'args' which can be either a hash or an array.
     # Documentation for this is available at http://doc.gitlab.com/ce/integration/omniauth.html
     providers:
+      # - { name: 'alicloud',
+      #     app_id: 'YOUR_APP_ID',
+      #     app_secret: 'YOUR_APP_SECRET' }
       # See omniauth-cas3 for more configuration details
       # - { name: 'cas3',
       #     label: 'cas3',
@@ -1562,6 +1565,9 @@ test:
     external_providers: []
 
     providers:
+      - { name: 'alicloud',
+          app_id: 'YOUR_APP_ID',
+          app_secret: 'YOUR_APP_SECRET' }
       - { name: 'cas3',
           label: 'cas3',
           args: { url: 'https://sso.example.com',
diff --git a/lib/gitlab/auth/o_auth/provider.rb b/lib/gitlab/auth/o_auth/provider.rb
index 41a8739b0b63..1a25ed10d81b 100644
--- a/lib/gitlab/auth/o_auth/provider.rb
+++ b/lib/gitlab/auth/o_auth/provider.rb
@@ -5,6 +5,7 @@ module Auth
     module OAuth
       class Provider
         LABELS = {
+          "alicloud"                 => "AliCloud",
           "dingtalk"                 => "DingTalk",
           "github"                   => "GitHub",
           "gitlab"                   => "GitLab.com",
diff --git a/spec/controllers/profiles/accounts_controller_spec.rb b/spec/controllers/profiles/accounts_controller_spec.rb
index 011528016ce5..1b4b67eeaff6 100644
--- a/spec/controllers/profiles/accounts_controller_spec.rb
+++ b/spec/controllers/profiles/accounts_controller_spec.rb
@@ -31,7 +31,7 @@
       end
     end
 
-    [:twitter, :facebook, :google_oauth2, :gitlab, :github, :bitbucket, :crowd, :auth0, :authentiq, :dingtalk].each do |provider|
+    [:twitter, :facebook, :google_oauth2, :gitlab, :github, :bitbucket, :crowd, :auth0, :authentiq, :dingtalk, :alicloud].each do |provider|
       describe "#{provider} provider" do
         let(:user) { create(:omniauth_user, provider: provider.to_s) }
 
diff --git a/spec/features/oauth_login_spec.rb b/spec/features/oauth_login_spec.rb
index 93674057fed6..ea5bb8c33b2c 100644
--- a/spec/features/oauth_login_spec.rb
+++ b/spec/features/oauth_login_spec.rb
@@ -16,7 +16,7 @@ def stub_omniauth_config(provider)
   end
 
   providers = [:github, :twitter, :bitbucket, :gitlab, :google_oauth2,
-               :facebook, :cas3, :auth0, :authentiq, :salesforce, :dingtalk]
+               :facebook, :cas3, :auth0, :authentiq, :salesforce, :dingtalk, :alicloud]
 
   around do |example|
     with_omniauth_full_host { example.run }
-- 
GitLab