summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCédric Couralet2018-07-30 13:47:09 +0000
committerCédric Couralet2018-07-31 08:36:56 +0000
commit66d374b1289e6dd33008dc931e9fb642051724d0 (patch)
tree4801a08657d2a0fd04c03a3ed46440e221f0ae23
parent93a3ce1164f69af24381c94b941048580891e1b8 (diff)
Add possibility to choose between version v3 or v4 for the gitlab api.
Apart from the uri versioning, one big change is the snippet visibility post data (visibility_level -> visibility) Default gitlab api version to v4 Signed-off-by: Cédric Couralet <cedric.couralet@gmail.com>
-rw-r--r--README.md1
-rw-r--r--config.json.example3
-rw-r--r--lib/config/index.js6
-rw-r--r--lib/response.js4
-rw-r--r--public/js/index.js17
-rw-r--r--public/views/codimd/body.ejs2
6 files changed, 24 insertions, 9 deletions
diff --git a/README.md b/README.md
index a9f0d4bd..e0f7aca8 100644
--- a/README.md
+++ b/README.md
@@ -194,6 +194,7 @@ There are some config settings you need to change in the files below.
| `CMD_GITLAB_BASEURL` | no example | GitLab authentication endpoint, set to use other endpoint than GitLab.com (optional) |
| `CMD_GITLAB_CLIENTID` | no example | GitLab API client id |
| `CMD_GITLAB_CLIENTSECRET` | no example | GitLab API client secret |
+| `CMD_GITLAB_VERSION` | no example | GitLab API version (v3 or v4) |
| `CMD_MATTERMOST_BASEURL` | no example | Mattermost authentication endpoint |
| `CMD_MATTERMOST_CLIENTID` | no example | Mattermost API client id |
| `CMD_MATTERMOST_CLIENTSECRET` | no example | Mattermost API client secret |
diff --git a/config.json.example b/config.json.example
index 1f2ec3d5..16c95509 100644
--- a/config.json.example
+++ b/config.json.example
@@ -55,7 +55,8 @@
"baseURL": "change this",
"clientID": "change this",
"clientSecret": "change this",
- "scope": "use 'read_user' scope for auth user only or remove this property if you need gitlab snippet import/export support (will result to be default scope 'api')"
+ "scope": "use 'read_user' scope for auth user only or remove this property if you need gitlab snippet import/export support (will result to be default scope 'api')",
+ "version": "use 'v4' if gitlab version > 11, 'v3' otherwise. Default to 'v4'"
},
"mattermost": {
"baseURL": "change this",
diff --git a/lib/config/index.js b/lib/config/index.js
index ac03fcd4..e66c513d 100644
--- a/lib/config/index.js
+++ b/lib/config/index.js
@@ -103,6 +103,12 @@ config.isSAMLEnable = config.saml.idpSsoUrl
config.isOAuth2Enable = config.oauth2.clientID && config.oauth2.clientSecret
config.isPDFExportEnable = config.allowPDFExport
+// Check gitlab api version
+if (config.gitlab.version !== 'v4' || config.gitlab.version !== 'v3') {
+ logger.warn('config.js contains wrong version (' + config.gitlab.version + ') for gitlab api; it should be \'v3\' or \'v4\'. Defaulting to v3')
+ config.gitlab.version = 'v4'
+}
+
// Only update i18n files in development setups
config.updateI18nFiles = (env === Environment.development)
diff --git a/lib/response.js b/lib/response.js
index 3a31c511..37211998 100644
--- a/lib/response.js
+++ b/lib/response.js
@@ -573,11 +573,11 @@ function gitlabActionProjects (req, res, note) {
}
}).then(function (user) {
if (!user) { return response.errorNotFound(res) }
- var ret = { baseURL: config.gitlab.baseURL }
+ var ret = { baseURL: config.gitlab.baseURL, version: config.gitlab.version }
ret.accesstoken = user.accessToken
ret.profileid = user.profileid
request(
- config.gitlab.baseURL + '/api/v3/projects?access_token=' + user.accessToken,
+ config.gitlab.baseURL + '/api/' + config.gitlab.version + '/projects?access_token=' + user.accessToken,
function (error, httpResponse, body) {
if (!error && httpResponse.statusCode === 200) {
ret.projects = JSON.parse(body)
diff --git a/public/js/index.js b/public/js/index.js
index 6e13fe9c..1330deac 100644
--- a/public/js/index.js
+++ b/public/js/index.js
@@ -970,6 +970,7 @@ ui.toolbar.export.snippet.click(function () {
.done(function (data) {
$('#snippetExportModalAccessToken').val(data.accesstoken)
$('#snippetExportModalBaseURL').val(data.baseURL)
+ $('#snippetExportModalVersion').val(data.version)
$('#snippetExportModalLoading').hide()
$('#snippetExportModal').modal('toggle')
$('#snippetExportModalProjects').find('option').remove().end().append('<option value="init" selected="selected" disabled="disabled">Select From Available Projects</option>')
@@ -1021,6 +1022,7 @@ ui.toolbar.import.snippet.click(function () {
.done(function (data) {
$('#snippetImportModalAccessToken').val(data.accesstoken)
$('#snippetImportModalBaseURL').val(data.baseURL)
+ $('#snippetImportModalVersion').val(data.version)
$('#snippetImportModalContent').prop('disabled', false)
$('#snippetImportModalConfirm').prop('disabled', false)
$('#snippetImportModalLoading').hide()
@@ -1243,10 +1245,10 @@ ui.modal.snippetImportProjects.change(function () {
var accesstoken = $('#snippetImportModalAccessToken').val()
var baseURL = $('#snippetImportModalBaseURL').val()
var project = $('#snippetImportModalProjects').val()
-
+ var version = $('#snippetImportModalVersion').val()
$('#snippetImportModalLoading').show()
$('#snippetImportModalContent').val('/projects/' + project)
- $.get(baseURL + '/api/v3/projects/' + project + '/snippets?access_token=' + accesstoken)
+ $.get(baseURL + '/api/' + version + '/projects/' + project + '/snippets?access_token=' + accesstoken)
.done(function (data) {
$('#snippetImportModalSnippets').find('option').remove().end().append('<option value="init" selected="selected" disabled="disabled">Select From Available Snippets</option>')
data.forEach(function (snippet) {
@@ -1433,7 +1435,7 @@ $('#snippetImportModalConfirm').click(function () {
} else {
ui.spinner.show()
var accessToken = '?access_token=' + $('#snippetImportModalAccessToken').val()
- var fullURL = $('#snippetImportModalBaseURL').val() + '/api/v3' + snippeturl
+ var fullURL = $('#snippetImportModalBaseURL').val() + '/api/' + $('#snippetImportModalVersion').val() + snippeturl
$.get(fullURL + accessToken)
.done(function (data) {
var content = '# ' + (data.title || 'Snippet Import')
@@ -1470,15 +1472,19 @@ $('#snippetImportModalConfirm').click(function () {
$('#snippetExportModalConfirm').click(function () {
var accesstoken = $('#snippetExportModalAccessToken').val()
var baseURL = $('#snippetExportModalBaseURL').val()
+ var version = $('#snippetExportModalVersion').val()
+
var data = {
title: $('#snippetExportModalTitle').val(),
file_name: $('#snippetExportModalFileName').val(),
code: editor.getValue(),
- visibility_level: $('#snippetExportModalVisibility').val()
+ visibility_level: $('#snippetExportModalVisibility').val(),
+ visibility: $('#snippetExportModalVisibility').val() === 0 ? 'private' : ($('#snippetExportModalVisibility').val() === 10 ? 'internal' : '')
}
+
if (!data.title || !data.file_name || !data.code || !data.visibility_level || !$('#snippetExportModalProjects').val()) return
$('#snippetExportModalLoading').show()
- var fullURL = baseURL + '/api/v3/projects/' + $('#snippetExportModalProjects').val() + '/snippets?access_token=' + accesstoken
+ var fullURL = baseURL + '/api/' + version + '/projects/' + $('#snippetExportModalProjects').val() + '/snippets?access_token=' + accesstoken
$.post(fullURL
, data
, function (ret) {
@@ -1487,7 +1493,6 @@ $('#snippetExportModalConfirm').click(function () {
var redirect = baseURL + '/' + $("#snippetExportModalProjects option[value='" + $('#snippetExportModalProjects').val() + "']").text() + '/snippets/' + ret.id
showMessageModal('<i class="fa fa-gitlab"></i> Export to Snippet', 'Export Successful!', redirect, 'View Snippet Here', true)
}
- , 'json'
)
})
diff --git a/public/views/codimd/body.ejs b/public/views/codimd/body.ejs
index b5932a61..d4f27a93 100644
--- a/public/views/codimd/body.ejs
+++ b/public/views/codimd/body.ejs
@@ -153,6 +153,7 @@
<div class="modal-body">
<input type="hidden" id="snippetImportModalAccessToken" />
<input type="hidden" id="snippetImportModalBaseURL" />
+ <input type="hidden" id="snippetImportModalVersion" />
<div class="ui-field-contain" style="display:table;margin-bottom:10px;width:100%;">
<div style="display:table-row;margin-bottom:5px;">
<label style="display:table-cell;">Project:</label>
@@ -191,6 +192,7 @@
<div class="modal-body">
<input type="hidden" id="snippetExportModalAccessToken" />
<input type="hidden" id="snippetExportModalBaseURL" />
+ <input type="hidden" id="snippetExportModalVersion" />
<div class="ui-field-contain" style="display:table;margin-bottom:10px;width:100%;">
<div style="display:table-row;margin-bottom:5px;">
<label style="display:table-cell;">Title:</label>