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/atlassian/jira_connect/client.rb')
-rw-r--r--lib/atlassian/jira_connect/client.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/atlassian/jira_connect/client.rb b/lib/atlassian/jira_connect/client.rb
new file mode 100644
index 00000000000..0b578c03782
--- /dev/null
+++ b/lib/atlassian/jira_connect/client.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+module Atlassian
+ module JiraConnect
+ class Client < Gitlab::HTTP
+ def initialize(base_uri, shared_secret)
+ @base_uri = base_uri
+ @shared_secret = shared_secret
+ end
+
+ def store_dev_info(project:, commits: nil, branches: nil, merge_requests: nil)
+ dev_info_json = {
+ repositories: [
+ Serializers::RepositoryEntity.represent(
+ project,
+ commits: commits,
+ branches: branches,
+ merge_requests: merge_requests
+ )
+ ]
+ }.to_json
+
+ uri = URI.join(@base_uri, '/rest/devinfo/0.10/bulk')
+
+ headers = {
+ 'Authorization' => "JWT #{jwt_token('POST', uri)}",
+ 'Content-Type' => 'application/json'
+ }
+
+ self.class.post(uri, headers: headers, body: dev_info_json)
+ end
+
+ private
+
+ def jwt_token(http_method, uri)
+ claims = Atlassian::Jwt.build_claims(
+ Atlassian::JiraConnect.app_key,
+ uri,
+ http_method,
+ @base_uri
+ )
+
+ Atlassian::Jwt.encode(claims, @shared_secret)
+ end
+ end
+ end
+end