gitlab.js 4.34 KB
Newer Older
Rosanny Sihombing's avatar
Rosanny Sihombing committed
1
2
3
4
5
6
7
var env = process.env.NODE_ENV || 'testing'
const config = require('../config/config')[env]
const axios = require('axios')
const fs = require('fs')
var formData = require('form-data')

var gitlab = {
Rosanny Sihombing's avatar
Rosanny Sihombing committed
8
9
10
11
    // todo: GraphQL currentUser

    getUserByEmail: async function(email) {
        return axios({
Rosanny Sihombing's avatar
Rosanny Sihombing committed
12
13
14
15
16
            method: 'get',
            url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/users?search='+email,
            headers: { 
                'Authorization': 'Bearer '+config.gitlab.token_readWriteProjects}
        })
Rosanny Sihombing's avatar
Rosanny Sihombing committed
17
18
19
        .then(res => userData = {
            id: res.data[0].id,
            username: res.data[0].username
Rosanny Sihombing's avatar
Rosanny Sihombing committed
20
        })
Rosanny Sihombing's avatar
Rosanny Sihombing committed
21
        .catch(err => console.error(err))
Rosanny Sihombing's avatar
Rosanny Sihombing committed
22
    },
Rosanny Sihombing's avatar
Rosanny Sihombing committed
23
    createNewPages: async function(newPagesData, newLogoFile, template) {
Rosanny Sihombing's avatar
Rosanny Sihombing committed
24
        let data = new formData()
25
        data.append('avatar', fs.createReadStream(newLogoFile))
Rosanny Sihombing's avatar
Rosanny Sihombing committed
26

Rosanny Sihombing's avatar
Rosanny Sihombing committed
27
        return axios({
Rosanny Sihombing's avatar
Rosanny Sihombing committed
28
            method: 'post',
29
30
            url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects/user/'+newPagesData.getOwnerGitlabId()+
                '?name='+newPagesData.getName()+'&description='+newPagesData.getDesc()+'&tag_list=website'+
Rosanny Sihombing's avatar
Rosanny Sihombing committed
31
                '&use_custom_template=true&template_name='+template,
Rosanny Sihombing's avatar
Rosanny Sihombing committed
32
33
34
35
            headers: { 
                'Authorization': 'Bearer '+config.gitlab.token_readWriteProjects, 
                ...data.getHeaders()
            },
Rosanny Sihombing's avatar
Rosanny Sihombing committed
36
            data: data
37
        })
Rosanny Sihombing's avatar
Rosanny Sihombing committed
38
39
40
41
42
43
44
        .then(res => res = {
            error: false,
            data: res.data
        })
        .catch(err => res = {
            error: true,
            data: err.response.data
45
46
        })
    },
Rosanny Sihombing's avatar
Rosanny Sihombing committed
47
    updateProject: async function(updatedProjectData, newLogoFile){
48
49
50
51
        let data = new formData()
        if (newLogoFile) {
            data.append('avatar', fs.createReadStream(newLogoFile))
        }
Rosanny Sihombing's avatar
Rosanny Sihombing committed
52
53

        return axios({
54
55
56
57
58
59
60
61
62
            method: 'put',
            url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects/'+updatedProjectData.getId()+
                '?name='+updatedProjectData.getName()+'&description='+updatedProjectData.getDesc(),
            headers: { 
                'Authorization': 'Bearer '+config.gitlab.token_readWriteProjects, 
                ...data.getHeaders()
            },
            data : data
        })
Rosanny Sihombing's avatar
Rosanny Sihombing committed
63
64
65
66
67
68
69
70
71
72
73
74
75
76
        .then(res => res = {
            error: false,
            data: res.data
        })
        .catch(err => res = {
            error: true,
            data: err.response.data
        })
    },
    getUserProjects: async function(gitlabUserId) {
        return axios({
            method: 'get',
            url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/users/'+gitlabUserId+'/projects?private_token='+
                config.gitlab.token_readWriteProjects+'&owned=true&simple=true&visibility=public'
Rosanny Sihombing's avatar
Rosanny Sihombing committed
77
        })
Rosanny Sihombing's avatar
Rosanny Sihombing committed
78
79
        .then(res => res.data)
        .catch(err => console.error(err))
Rosanny Sihombing's avatar
Rosanny Sihombing committed
80
    },
Rosanny Sihombing's avatar
Rosanny Sihombing committed
81
82
83
84
85
    getProjectById: async function(projectId) {
        return axios({
            method: 'get',
            url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects/'+projectId+'?private_token='+
                config.gitlab.token_readWriteProjects
Rosanny Sihombing's avatar
Rosanny Sihombing committed
86
        })
Rosanny Sihombing's avatar
Rosanny Sihombing committed
87
88
89
90
91
92
93
        .then(res => res.data)
        .catch(err => console.error(err))
    },
    getProjectPipelineLatestStatus: async function(projectId) {
        return axios({
            method: 'get',
            url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects/'+projectId+'/pipelines'
Rosanny Sihombing's avatar
Rosanny Sihombing committed
94
        })
Rosanny Sihombing's avatar
Rosanny Sihombing committed
95
96
        .then(res => res.data[0].status)
        .catch(err => console.error(err))
Rosanny Sihombing's avatar
Rosanny Sihombing committed
97
    },
Rosanny Sihombing's avatar
Rosanny Sihombing committed
98
99
100
101
102
103
    // delete peoject: https://docs.gitlab.com/ee/api/projects.html#delete-project
    //
    // test GraphQL
    getGraphqlTest: function(callback) {
        axios({
            url: 'https://gitlab.com/api/graphql',
Rosanny Sihombing's avatar
Rosanny Sihombing committed
104
            method: 'get',
Rosanny Sihombing's avatar
Rosanny Sihombing committed
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
            headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer '+config.gitlab.token_readWriteProjects
            },
            data: {
                query: `{
                    currentUser {
                        id
                        username
                    }
                }`
            /*  query: `{
                projects {
                    nodes {
                        id
                    }
Rosanny Sihombing's avatar
Rosanny Sihombing committed
121
                }
Rosanny Sihombing's avatar
Rosanny Sihombing committed
122
123
124
125
              }` */
            }
        }).then((result) => {
            console.log(JSON.stringify(result.data))
Rosanny Sihombing's avatar
Rosanny Sihombing committed
126
        });
Rosanny Sihombing's avatar
Rosanny Sihombing committed
127
128
129
130
    }
}

module.exports = gitlab