gitlab-cloud-connector 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -3
  3. data/CHANGELOG.md +1 -1
  4. data/CONTRIBUTING.md +41 -0
  5. data/LICENSE +28 -0
  6. data/Makefile +33 -0
  7. data/README.md +16 -218
  8. data/Rakefile +1 -5
  9. data/config/config/add_ons/duo_enterprise.yml +2 -0
  10. data/config/config/add_ons/duo_pro.yml +2 -0
  11. data/config/config/backend_services/ai_gateway.yml +5 -0
  12. data/config/config/backend_services/duo_workflow_service.yml +5 -0
  13. data/config/config/license_types/premium.yml +2 -0
  14. data/config/config/license_types/ultimate.yml +2 -0
  15. data/config/config/unit_primitives/code_suggestions.yml +19 -0
  16. data/config/{cloud_connector/backend_services/ai_gateway → config}/unit_primitives/documentation_search.yml +11 -11
  17. data/config/{cloud_connector/backend_services/ai_gateway → config}/unit_primitives/duo_chat.yml +11 -11
  18. data/config/config/unit_primitives/explain_vulnerability.yml +19 -0
  19. data/config/config/unit_primitives/generate_commit_message.yml +19 -0
  20. data/config/config/unit_primitives/glab_ask_git_command.yml +19 -0
  21. data/config/config/unit_primitives/resolve_vulnerability.yml +19 -0
  22. data/config/config/unit_primitives/summarize_comments.yml +19 -0
  23. data/config/config/unit_primitives/troubleshoot_job.yml +19 -0
  24. data/lib/gitlab/cloud_connector/{backend_service.rb → version.rb} +1 -3
  25. metadata +40 -58
  26. data/.idea/.gitignore +0 -8
  27. data/.idea/gitlab-cloud-connector.iml +0 -127
  28. data/.idea/inspectionProfiles/Project_Default.xml +0 -9
  29. data/.idea/misc.xml +0 -4
  30. data/.idea/modules.xml +0 -8
  31. data/.idea/vcs.xml +0 -7
  32. data/Dangerfile +0 -5
  33. data/config/cloud_connector/backend_services/ai_gateway/unit_primitives/code_suggestions.yml +0 -19
  34. data/lib/gitlab/cloud_connector/auth/json_web_token.rb +0 -82
  35. data/lib/gitlab/cloud_connector/base_group.rb +0 -39
  36. data/lib/gitlab/cloud_connector/configuration.rb +0 -24
  37. data/lib/gitlab/cloud_connector/deliverable.rb +0 -31
  38. data/lib/gitlab/cloud_connector/delivered_by.rb +0 -10
  39. data/lib/gitlab/cloud_connector/purchasable_decorator.rb +0 -59
  40. data/lib/gitlab/cloud_connector/token_issuer.rb +0 -44
  41. data/lib/gitlab/cloud_connector/unit_primitives.rb +0 -195
  42. data/lib/gitlab/cloud_connector.rb +0 -68
  43. data/lib/gitlab/popen.rb +0 -68
  44. data/lib/utils/parse_helper.rb +0 -15
  45. data/lib/utils/strong_memoize.rb +0 -145
  46. data/sig/gitlab/cloud_connector.rbs +0 -0
metadata CHANGED
@@ -1,115 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-cloud-connector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nikola Milojevic
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-27 00:00:00.000000000 Z
11
+ date: 2024-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
14
+ name: gitlab-styles
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 7.0.8
20
- type: :runtime
19
+ version: 12.0.1
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 7.0.8
26
+ version: 12.0.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: gitlab-dangerfiles
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 4.8.0
33
+ version: 13.0.6
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 4.8.0
41
- - !ruby/object:Gem::Dependency
42
- name: rubocop-rails
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "<"
46
- - !ruby/object:Gem::Version
47
- version: 2.21.2
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "<"
53
- - !ruby/object:Gem::Version
54
- version: 2.21.2
40
+ version: 13.0.6
55
41
  - !ruby/object:Gem::Dependency
56
- name: gitlab-styles
42
+ name: rspec
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: 12.0.1
47
+ version: '3.8'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: 12.0.1
69
- description: 'This gem provides common CloudConnector configuration and libraries
70
- for GitLab projects.} '
54
+ version: '3.8'
55
+ description: This gem provides common CloudConnector configuration and libraries for
56
+ GitLab projects.
71
57
  email:
72
58
  - nmilojevic@gitlab.com
73
59
  executables: []
74
60
  extensions: []
75
61
  extra_rdoc_files: []
76
62
  files:
77
- - ".idea/.gitignore"
78
- - ".idea/gitlab-cloud-connector.iml"
79
- - ".idea/inspectionProfiles/Project_Default.xml"
80
- - ".idea/misc.xml"
81
- - ".idea/modules.xml"
82
- - ".idea/vcs.xml"
83
63
  - ".rspec"
84
64
  - ".rubocop.yml"
85
65
  - CHANGELOG.md
86
- - Dangerfile
66
+ - CONTRIBUTING.md
67
+ - LICENSE
68
+ - Makefile
87
69
  - README.md
88
70
  - Rakefile
89
- - config/cloud_connector/backend_services/ai_gateway/unit_primitives/code_suggestions.yml
90
- - config/cloud_connector/backend_services/ai_gateway/unit_primitives/documentation_search.yml
91
- - config/cloud_connector/backend_services/ai_gateway/unit_primitives/duo_chat.yml
92
- - lib/gitlab/cloud_connector.rb
93
- - lib/gitlab/cloud_connector/auth/json_web_token.rb
94
- - lib/gitlab/cloud_connector/backend_service.rb
95
- - lib/gitlab/cloud_connector/base_group.rb
96
- - lib/gitlab/cloud_connector/configuration.rb
97
- - lib/gitlab/cloud_connector/deliverable.rb
98
- - lib/gitlab/cloud_connector/delivered_by.rb
99
- - lib/gitlab/cloud_connector/purchasable_decorator.rb
100
- - lib/gitlab/cloud_connector/token_issuer.rb
101
- - lib/gitlab/cloud_connector/unit_primitives.rb
102
- - lib/gitlab/popen.rb
103
- - lib/utils/parse_helper.rb
104
- - lib/utils/strong_memoize.rb
105
- - sig/gitlab/cloud_connector.rbs
106
- homepage: https://gitlab.com.
107
- licenses: []
71
+ - config/config/add_ons/duo_enterprise.yml
72
+ - config/config/add_ons/duo_pro.yml
73
+ - config/config/backend_services/ai_gateway.yml
74
+ - config/config/backend_services/duo_workflow_service.yml
75
+ - config/config/license_types/premium.yml
76
+ - config/config/license_types/ultimate.yml
77
+ - config/config/unit_primitives/code_suggestions.yml
78
+ - config/config/unit_primitives/documentation_search.yml
79
+ - config/config/unit_primitives/duo_chat.yml
80
+ - config/config/unit_primitives/explain_vulnerability.yml
81
+ - config/config/unit_primitives/generate_commit_message.yml
82
+ - config/config/unit_primitives/glab_ask_git_command.yml
83
+ - config/config/unit_primitives/resolve_vulnerability.yml
84
+ - config/config/unit_primitives/summarize_comments.yml
85
+ - config/config/unit_primitives/troubleshoot_job.yml
86
+ - lib/gitlab/cloud_connector/version.rb
87
+ homepage: https://gitlab.com/gitlab-org/cloud-connector/gitlab-cloud-connector
88
+ licenses:
89
+ - MIT
108
90
  metadata:
109
91
  allowed_push_host: https://rubygems.org
110
- homepage_uri: https://gitlab.com.
111
- source_code_uri: https://gitlab.com/gitlab-org/ruby/gems/gitlab-cloud-connector.
112
- changelog_uri: https://gitlab.com/gitlab-org/ruby/gems/gitlab-cloud-connector/-/releases
92
+ homepage_uri: https://gitlab.com/gitlab-org/cloud-connector/gitlab-cloud-connector
93
+ source_code_uri: https://gitlab.com/gitlab-org/cloud-connector/gitlab-cloud-connector
94
+ changelog_uri: https://gitlab.com/gitlab-org/cloud-connector/gitlab-cloud-connector/-/releases
113
95
  post_install_message:
114
96
  rdoc_options: []
115
97
  require_paths:
@@ -128,5 +110,5 @@ requirements: []
128
110
  rubygems_version: 3.4.19
129
111
  signing_key:
130
112
  specification_version: 4
131
- summary: GitLab cloud connector project..
113
+ summary: GitLab cloud connector project.
132
114
  test_files: []
data/.idea/.gitignore DELETED
@@ -1,8 +0,0 @@
1
- # Default ignored files
2
- /shelf/
3
- /workspace.xml
4
- # Editor-based HTTP Client requests
5
- /httpRequests/
6
- # Datasource local storage ignored files
7
- /dataSources/
8
- /dataSources.local.xml
@@ -1,127 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="RUBY_MODULE" version="4">
3
- <component name="FacetManager">
4
- <facet type="RailsFacetType" name="Ruby on Rails">
5
- <configuration>
6
- <RAILS_FACET_CONFIG_ID NAME="RAILS_FACET_SUPPORT_REMOVED" VALUE="false" />
7
- <RAILS_FACET_CONFIG_ID NAME="RAILS_TESTS_SOURCES_PATCHED" VALUE="true" />
8
- <RAILS_FACET_CONFIG_ID NAME="RAILS_FACET_APPLICATION_ROOT" VALUE="$MODULE_DIR$" />
9
- </configuration>
10
- </facet>
11
- </component>
12
- <component name="ModuleRunConfigurationManager">
13
- <shared />
14
- </component>
15
- <component name="NewModuleRootManager">
16
- <content url="file://$MODULE_DIR$">
17
- <sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
18
- <sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
19
- <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
20
- <excludeFolder url="file://$MODULE_DIR$/.bundle" />
21
- <excludeFolder url="file://$MODULE_DIR$/public/packs" />
22
- <excludeFolder url="file://$MODULE_DIR$/vendor/bundle" />
23
- <excludeFolder url="file://$MODULE_DIR$/vendor/cache" />
24
- <excludeFolder url="file://$MODULE_DIR$/log" />
25
- <excludeFolder url="file://$MODULE_DIR$/tmp" />
26
- <excludeFolder url="file://$MODULE_DIR$/public/system" />
27
- <excludeFolder url="file://$MODULE_DIR$/components" />
28
- </content>
29
- <orderEntry type="inheritedJdk" />
30
- <orderEntry type="sourceFolder" forTests="false" />
31
- <orderEntry type="library" scope="PROVIDED" name="ast (v2.4.2, asdf: 3.2.1) [gem]" level="application" />
32
- <orderEntry type="library" scope="PROVIDED" name="crass (v1.0.6, asdf: 3.2.1) [gem]" level="application" />
33
- <orderEntry type="library" scope="PROVIDED" name="mail (v2.8.1, asdf: 3.2.1) [gem]" level="application" />
34
- <orderEntry type="library" scope="PROVIDED" name="net-pop (v0.1.2, asdf: 3.2.1) [gem]" level="application" />
35
- <orderEntry type="library" scope="PROVIDED" name="rack-test (v2.1.0, asdf: 3.2.1) [gem]" level="application" />
36
- <orderEntry type="library" scope="PROVIDED" name="rails-html-sanitizer (v1.6.0, asdf: 3.2.1) [gem]" level="application" />
37
- <orderEntry type="library" scope="PROVIDED" name="rainbow (v3.1.1, asdf: 3.2.1) [gem]" level="application" />
38
- <orderEntry type="library" scope="PROVIDED" name="rubocop-rails (v2.18.0, asdf: 3.2.1) [gem]" level="application" />
39
- <orderEntry type="library" scope="PROVIDED" name="tzinfo (v2.0.6, asdf: 3.2.1) [gem]" level="application" />
40
- <orderEntry type="library" scope="PROVIDED" name="websocket-extensions (v0.1.5, asdf: 3.2.1) [gem]" level="application" />
41
- </component>
42
- <component name="RModuleSettingsStorage">
43
- <LOAD_PATH number="0" />
44
- <I18N_FOLDERS number="1" string0="$MODULE_DIR$/config/locales" />
45
- </component>
46
- <component name="RailsGeneratorsCache">
47
- <option name="generators">
48
- <list>
49
- <option value="active_record:migration" />
50
- <option value="active_record:model" />
51
- <option value="active_record:observer" />
52
- <option value="active_record:session_migration" />
53
- <option value="controller" />
54
- <option value="erb:controller" />
55
- <option value="erb:mailer" />
56
- <option value="erb:scaffold" />
57
- <option value="generator" />
58
- <option value="helper" />
59
- <option value="integration_test" />
60
- <option value="mailer" />
61
- <option value="metal" />
62
- <option value="migration" />
63
- <option value="model" />
64
- <option value="model_subclass" />
65
- <option value="observer" />
66
- <option value="performance_test" />
67
- <option value="plugin" />
68
- <option value="resource" />
69
- <option value="scaffold" />
70
- <option value="scaffold_controller" />
71
- <option value="session_migration" />
72
- <option value="stylesheets" />
73
- <option value="test_unit:controller" />
74
- <option value="test_unit:helper" />
75
- <option value="test_unit:integration" />
76
- <option value="test_unit:mailer" />
77
- <option value="test_unit:model" />
78
- <option value="test_unit:observer" />
79
- <option value="test_unit:performance" />
80
- <option value="test_unit:plugin" />
81
- <option value="test_unit:scaffold" />
82
- </list>
83
- </option>
84
- <option name="myGenerators">
85
- <list>
86
- <option value="active_record:migration" />
87
- <option value="active_record:model" />
88
- <option value="active_record:observer" />
89
- <option value="active_record:session_migration" />
90
- <option value="controller" />
91
- <option value="erb:controller" />
92
- <option value="erb:mailer" />
93
- <option value="erb:scaffold" />
94
- <option value="generator" />
95
- <option value="helper" />
96
- <option value="integration_test" />
97
- <option value="mailer" />
98
- <option value="metal" />
99
- <option value="migration" />
100
- <option value="model" />
101
- <option value="model_subclass" />
102
- <option value="observer" />
103
- <option value="performance_test" />
104
- <option value="plugin" />
105
- <option value="resource" />
106
- <option value="scaffold" />
107
- <option value="scaffold_controller" />
108
- <option value="session_migration" />
109
- <option value="stylesheets" />
110
- <option value="test_unit:controller" />
111
- <option value="test_unit:helper" />
112
- <option value="test_unit:integration" />
113
- <option value="test_unit:mailer" />
114
- <option value="test_unit:model" />
115
- <option value="test_unit:observer" />
116
- <option value="test_unit:performance" />
117
- <option value="test_unit:plugin" />
118
- <option value="test_unit:scaffold" />
119
- </list>
120
- </option>
121
- </component>
122
- <component name="RakeTasksCache">
123
- <option name="myRootTask">
124
- <RakeTaskImpl id="rake" />
125
- </option>
126
- </component>
127
- </module>
@@ -1,9 +0,0 @@
1
- <component name="InspectionProjectProfileManager">
2
- <profile version="1.0">
3
- <option name="myName" value="Project Default" />
4
- <inspection_tool class="Rubocop" enabled="true" level="WARNING" enabled_by_default="true">
5
- <option name="myUseStandardGemIfPossible" value="true" />
6
- <option name="myRunRubocopOnSave" value="true" />
7
- </inspection_tool>
8
- </profile>
9
- </component>
data/.idea/misc.xml DELETED
@@ -1,4 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectRootManager" version="2" project-jdk-name="asdf: 3.2.1" project-jdk-type="RUBY_SDK" />
4
- </project>
data/.idea/modules.xml DELETED
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/gitlab-cloud-connector.iml" filepath="$PROJECT_DIR$/.idea/gitlab-cloud-connector.iml" />
6
- </modules>
7
- </component>
8
- </project>
data/.idea/vcs.xml DELETED
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="" vcs="Git" />
5
- <mapping directory="$PROJECT_DIR$/gitlab-cloud-connector" vcs="Git" />
6
- </component>
7
- </project>
data/Dangerfile DELETED
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gitlab-dangerfiles'
4
-
5
- Gitlab::Dangerfiles.for_project(self, 'gitlab-cloud-connector', &:import_defaults)
@@ -1,19 +0,0 @@
1
- ---
2
- name: code_suggestions
3
- description:
4
- backend: 'gitlab-ai-gateway'
5
- cut_off_date: 2024-02-15 00:00:00 UTC
6
- min_gitlab_version_for_free_access:
7
- min_gitlab_version: '16.8'
8
- min_backend_version:
9
- delivered_by:
10
- - code_suggestions
11
- bundled_with:
12
- - duo_pro
13
- - duo_enterprise
14
- introduced_by_url:
15
- group: group::code suggestions
16
- feature_category: code_suggestions
17
- gitlab_realms:
18
- - saas
19
- - self-managed
@@ -1,82 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "active_support"
4
- require "active_support/all"
5
-
6
- module Gitlab
7
- module CloudConnector
8
- module Auth
9
- class JsonWebToken
10
- NOT_BEFORE_TIME = 5.seconds.to_i.freeze
11
- DEFAULT_EXPIRES_IN = 3.days.to_i.freeze
12
- NoSigningKeyError = Class.new(StandardError)
13
-
14
- attr_reader :expires_at, :scopes
15
-
16
- def initialize(audience:, subject:, scopes:, expires_at: nil, extra_claims: nil, gitlab_realm: nil)
17
- @id = SecureRandom.uuid
18
- @audience = audience
19
- @subject = subject
20
- @scopes = Array.wrap(scopes)
21
- @issuer = issuer
22
- @issued_at = Time.current.to_i
23
- @not_before = @issued_at - NOT_BEFORE_TIME
24
- @expires_at = expires_at || (@issued_at + expires_in)
25
- @extra_claims = extra_claims
26
- @gitlab_realm = gitlab_realm || ::Gitlab::CloudConnector.gitlab_realm
27
- end
28
-
29
- def encode
30
- headers = { typ: 'JWT' }
31
-
32
- JWT.encode(payload, key, 'RS256', headers)
33
- end
34
-
35
- def payload
36
- reserved_claims = {
37
- jti: @id,
38
- aud: @audience,
39
- sub: @subject,
40
- iss: @issuer,
41
- iat: @issued_at,
42
- nbf: @not_before,
43
- exp: @expires_at
44
- }
45
-
46
- custom_claims = {
47
- gitlab_realm: @gitlab_realm,
48
- scopes: @scopes,
49
- extra_claims: @extra_claims
50
- }
51
-
52
- reserved_claims.merge(custom_claims)
53
- end
54
-
55
- private
56
-
57
- def expires_in
58
- ::Gitlab::CloudConnector.token_expires_in || DEFAULT_EXPIRES_IN
59
- end
60
-
61
- def issuer
62
- issuer = Gitlab::CloudConnector.token_issuer
63
-
64
- if issuer.is_a?(Proc)
65
- p "lambda?"
66
- issuer.call
67
- else
68
- issuer
69
- end
70
- end
71
-
72
- def key
73
- key_data = Settings.value(:jwt_signing_key)
74
-
75
- raise NoSigningKeyError unless key_data
76
-
77
- OpenSSL::PKey::RSA.new(key_data)
78
- end
79
- end
80
- end
81
- end
82
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'token_issuer'
4
-
5
- module Gitlab
6
- module CloudConnector
7
- class BaseGroup
8
- include TokenIssuer
9
-
10
- attr_reader :name, :unit_primitives
11
-
12
- def initialize(name, unit_primitives)
13
- @name = name
14
- @unit_primitives = unit_primitives
15
- end
16
-
17
- def cut_off_date
18
- unit_primitives.values.map(&:cut_off_date).compact.max
19
- end
20
-
21
- def bundled_with
22
- unit_primitives.values.flat_map(&:bundled_with).uniq
23
- end
24
- alias :add_ons :bundled_with
25
-
26
- def feature_categories
27
- unit_primitives.values.map(&:feature_category).uniq
28
- end
29
-
30
- def min_gitlab_version
31
- unit_primitives.values.flat_map(&:min_gitlab_version).compact.min
32
- end
33
-
34
- def min_gitlab_version_for_free_access
35
- unit_primitives.values.flat_map(&:min_gitlab_version_for_free_access).compact.min
36
- end
37
- end
38
- end
39
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'unit_primitives'
4
- require_relative 'purchasable_decorator'
5
-
6
- module Gitlab
7
- module CloudConnector
8
- class Configuration
9
- attr_reader :purchasable_decorator_class
10
- attr_accessor :token_issuer, :token_subject, :gitlab_version, :token_expires_in, :gitlab_realm
11
-
12
- def purchasable_decorator_class=(purchasable_decorator_class)
13
- raise ArgumentError, 'Must be a class inheriting from Gitlab::CloudConnector::PurchasableDecorator' unless
14
- purchasable_decorator_class < Gitlab::CloudConnector::PurchasableDecorator
15
-
16
- @purchasable_decorator_class = purchasable_decorator_class
17
- end
18
-
19
- def purchasable_decorator_class
20
- @purchasable_decorator_class ||= Gitlab::CloudConnector::PurchasableDecorator
21
- end
22
- end
23
- end
24
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Gitlab
4
- module CloudConnector
5
- module Deliverable
6
- def delivered_by
7
- # TODO add memoization
8
- result = Hash.new{ |h, k| h[k] = [] }
9
-
10
- unit_primitives.values.each do |unit_primitive|
11
- unit_primitive.delivered_by.each do |delivered_by|
12
- result[delivered_by.to_sym] << unit_primitive
13
- end
14
- end
15
-
16
- result.each do |delivered_by, unit_primitives|
17
- result[delivered_by] = build_delivered_by(delivered_by, unit_primitives.index_by(&:key))
18
- end
19
-
20
- result
21
- end
22
-
23
- private
24
-
25
- def build_delivered_by(name, unit_primitives)
26
- delivered_by = Gitlab::CloudConnector::DeliveredBy.new(name, unit_primitives)
27
- Gitlab::CloudConnector.configuration.purchasable_decorator_class.new(delivered_by)
28
- end
29
- end
30
- end
31
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base_group'
4
-
5
- module Gitlab
6
- module CloudConnector
7
- class DeliveredBy < BaseGroup
8
- end
9
- end
10
- end
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../utils/strong_memoize'
4
- require_relative '../../utils/parse_helper'
5
- require "active_support"
6
- require "active_support/core_ext/module/delegation"
7
-
8
- module Gitlab
9
- module CloudConnector
10
- class PurchasableDecorator
11
- include ::Utils::StrongMemoize
12
- include ::Utils::ParseHelper
13
-
14
- delegate_missing_to :unit_primitive_or_group
15
-
16
- def initialize(unit_primitive_or_group)
17
- @unit_primitive_or_group = unit_primitive_or_group
18
- end
19
-
20
- def available_for?(_resource)
21
- raise 'Not Implemented'
22
- end
23
-
24
- def free_access?
25
- !cut_off_date&.past?
26
- end
27
-
28
- def available?(resource, gitlab_version, gitlab_realm)
29
- return false unless gitlab_realms.include?(gitlab_realm)
30
-
31
- supported_gitlab_version?(gitlab_version) && (free_access? || available_for?(resource))
32
- end
33
-
34
- def supported_gitlab_version?(gitlab_version)
35
- min_gitlab_version = calculate_min_gitlab_version
36
-
37
- return true unless min_gitlab_version
38
- return false unless gitlab_version
39
- # Extract only major and minor version (ignore -ee, -pre and patch suffixes)
40
- gitlab_version = parse_version(gitlab_version)
41
-
42
- gitlab_version >= min_gitlab_version
43
- end
44
-
45
- def calculate_min_gitlab_version
46
- if free_access?
47
- min_gitlab_version_for_free_access
48
- else
49
- min_gitlab_version
50
- end
51
- end
52
-
53
- private
54
-
55
- attr_reader :unit_primitive_or_group
56
-
57
- end
58
- end
59
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'auth/json_web_token'
4
-
5
- module Gitlab
6
- module CloudConnector
7
- ###
8
- # Provides access information for GitLab services offered under Cloud Connector.
9
- #
10
- # Self-Managed GitLab instances sync with this service to get access to Cloud Connector
11
- # features based on billing status and other information.
12
- module TokenIssuer
13
-
14
- attr_reader :subject, :extra_claims
15
-
16
- def access_token(resource, gitlab_version: nil, gitlab_realm: nil, subject: nil, extra_claims: {})
17
- subject ||= ::Gitlab::CloudConnector.token_subject
18
- gitlab_version ||= ::Gitlab::CloudConnector.gitlab_version
19
- gitlab_realm ||= ::Gitlab::CloudConnector.gitlab_realm
20
-
21
- allowed_scopes = allowed_scopes(resource, gitlab_version, gitlab_realm)
22
-
23
- return nil if allowed_scopes.empty?
24
-
25
- ::Gitlab::CloudConnector::Auth::JsonWebToken.new(
26
- audience: allowed_backends,
27
- subject: subject,
28
- scopes: allowed_scopes,
29
- extra_claims: extra_claims
30
- )
31
- end
32
-
33
- private
34
-
35
- def allowed_backends
36
- unit_primitives.values.map{ |unit_primitive| "gitlab-#{unit_primitive.backend_service.dasherize}"}.uniq
37
- end
38
-
39
- def allowed_scopes(resource, gitlab_version, gitlab_realm)
40
- unit_primitives.values.select{ |unit_primitive| unit_primitive.available?(resource, gitlab_version, gitlab_realm) }.map(&:name)
41
- end
42
- end
43
- end
44
- end