From 853d0441b4aa5f874d0cfa33c57eba9bc889c32d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me>
Date: Thu, 19 Oct 2023 16:04:46 +0200
Subject: [PATCH] GitlabManager => Add get tokens function

---
 managers/SharedGitlabManager.ts | 14 ++++++++++++++
 types/Gitlab/GitlabToken.ts     | 11 +++++++++++
 2 files changed, 25 insertions(+)
 create mode 100644 types/Gitlab/GitlabToken.ts

diff --git a/managers/SharedGitlabManager.ts b/managers/SharedGitlabManager.ts
index a3a0020..e55fbcb 100644
--- a/managers/SharedGitlabManager.ts
+++ b/managers/SharedGitlabManager.ts
@@ -2,6 +2,7 @@ import axios          from 'axios';
 import GitlabPipeline from '../types/Gitlab/GitlabPipeline';
 import GitlabRoute    from '../types/Gitlab/GitlabRoute';
 import SharedConfig   from '../config/SharedConfig';
+import GitlabToken    from '../types/Gitlab/GitlabToken';
 
 
 class GitlabManager {
@@ -9,6 +10,19 @@ class GitlabManager {
         return `${ SharedConfig.gitlab.apiURL }${ route }`;
     }
 
+    async getTokens(codeOrRefresh: string, isRefresh: boolean = false, clientSecret: string = ''): Promise<GitlabToken> {
+        const response = await axios.post<GitlabToken>(`${ SharedConfig.gitlab.URL }/oauth/token`, {
+            client_id    : SharedConfig.login.gitlab.client.id,
+            client_secret: clientSecret,
+            grant_type   : isRefresh ? 'refresh_token' : 'authorization_code',
+            refresh_token: codeOrRefresh,
+            code         : codeOrRefresh,
+            redirect_uri : SharedConfig.login.gitlab.url.redirect
+        });
+
+        return response.data;
+    }
+
     async getRepositoryPipelines(repoId: number, branch: string = 'main'): Promise<Array<GitlabPipeline>> {
         const response = await axios.get<Array<GitlabPipeline>>(this.getApiUrl(GitlabRoute.REPOSITORY_PIPELINES).replace('{{id}}', String(repoId)), {
             params: {
diff --git a/types/Gitlab/GitlabToken.ts b/types/Gitlab/GitlabToken.ts
new file mode 100644
index 0000000..c8c647e
--- /dev/null
+++ b/types/Gitlab/GitlabToken.ts
@@ -0,0 +1,11 @@
+interface GitlabToken {
+    access_token: string;
+    token_type: string;
+    expires_in: number;
+    refresh_token: string;
+    scope: string;
+    created_at: number;
+}
+
+
+export default GitlabToken;
\ No newline at end of file
-- 
GitLab