Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • jw_sonar
  • jw_sonar_backup
  • main
  • move-to-esm-only
  • open_tool_for_self_hosting
  • v5.0
  • v4.1
  • v4.2
8 results

Target

Select target project
  • dojo_project/projects/shared/nodesharedcode
1 result
Select Git revision
  • jw_sonar
  • jw_sonar_backup
  • main
  • move-to-esm-only
  • open_tool_for_self_hosting
  • v5.0
  • v4.1
  • v4.2
8 results
Show changes
Commits on Source (9)
......@@ -4,7 +4,17 @@ class SharedConfig {
public readonly logsFolder: string;
public gitlab: {
apiURL: string
URL: string, apiURL: string
};
public readonly login: {
gitlab: {
client: {
id: string
}, url: {
redirect: string, token: string
}
}
};
......@@ -14,8 +24,21 @@ class SharedConfig {
this.logsFolder = process.env.LOGS_FOLDER || '';
this.gitlab = {
URL : process.env.GITLAB_URL || '',
apiURL: process.env.GITLAB_API_URL || ''
};
this.login = {
gitlab: {
client: {
id: process.env.LOGIN_GITLAB_CLIENT_ID || ''
},
url : {
redirect: process.env.LOGIN_GITLAB_URL_REDIRECT || '',
token : process.env.LOGIN_GITLAB_URL_TOKEN || ''
}
}
};
}
}
......
......@@ -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,23 @@ class GitlabManager {
return `${ SharedConfig.gitlab.apiURL }${ route }`;
}
async getTokens(codeOrRefresh: string, isRefresh: boolean = false, clientSecret: string = ''): Promise<GitlabToken> {
try {
const response = await axios.post<GitlabToken>(SharedConfig.login.gitlab.url.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;
} catch ( error ) {
throw error;
}
}
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: {
......
enum DojoStatusCode {
LOGIN_FAILED = 1,
REFRESH_TOKENS_FAILED = 2,
CLIENT_NOT_SUPPORTED = 100,
CLIENT_VERSION_NOT_SUPPORTED = 110,
ASSIGNMENT_PUBLISH_NO_PIPELINE = 200,
ASSIGNMENT_PUBLISH_PIPELINE_FAILED = 201
ASSIGNMENT_PUBLISH_PIPELINE_FAILED = 201,
ASSIGNMENT_CREATION_GITLAB_ERROR = 202,
ASSIGNMENT_CREATION_INTERNAL_ERROR = 203,
EXERCISE_CREATION_GITLAB_ERROR = 302,
EXERCISE_CREATION_INTERNAL_ERROR = 303
}
......
import GitlabUser from './GitlabUser';
interface GitlabProfile extends GitlabUser {
created_at: string,
bio: string,
location: string,
public_email: string,
skype: string,
linkedin: string,
twitter: string,
discord: string,
website_url: string,
organization: string,
job_title: string,
pronouns: string,
bot: boolean,
work_information: string,
local_time: string,
last_sign_in_at: string,
confirmed_at: string,
last_activity_on: string,
email: string,
theme_id: number,
color_scheme_id: number,
projects_limit: number,
current_sign_in_at: string,
identities: Array<{
provider: string, extern_uid: string
}>,
can_create_group: boolean,
can_create_project: boolean,
two_factor_enabled: boolean,
external: boolean,
private_profile: boolean,
commit_email: string
}
export default GitlabProfile;
\ No newline at end of file
enum GitlabRoute {
NOTIFICATION_SETTINGS = '/notification_settings',
PROFILE_GET = '/user',
USERS_GET = '/users',
REPOSITORY_GET = '/projects/{{id}}',
REPOSITORY_CREATE = '/projects',
REPOSITORY_DELETE = '/projects/{{id}}',
REPOSITORY_EDIT = '/projects/{{id}}',
REPOSITORY_FORK = '/projects/{{id}}/fork',
REPOSITORY_MEMBER_ADD = '/projects/{{id}}/members',
......
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