diff --git a/lib/csp.js b/lib/csp.js
index 82573beaf..dc3706e2a 100644
--- a/lib/csp.js
+++ b/lib/csp.js
@@ -50,6 +50,10 @@ const allowPDFEmbedDirectives = {
frameSrc: ['*'] // Chrome also checks PDFs against frame-src
}
+const configuredGitLabInstanceDirectives = {
+ connectSrc: [config.gitlab.baseURL]
+}
+
CspStrategy.computeDirectives = function () {
const directives = {}
mergeDirectives(directives, config.csp.directives)
@@ -59,6 +63,7 @@ CspStrategy.computeDirectives = function () {
mergeDirectivesIf(config.dropbox.appKey, directives, dropboxDirectives)
mergeDirectivesIf(!config.csp.allowFraming, directives, disallowFramingDirectives)
mergeDirectivesIf(config.csp.allowPDFEmbed, directives, allowPDFEmbedDirectives)
+ mergeDirectivesIf(config.isGitlabSnippetsEnable, directives, configuredGitLabInstanceDirectives)
addInlineScriptExceptions(directives)
addUpgradeUnsafeRequestsOptionTo(directives)
addReportURI(directives)
diff --git a/lib/response.js b/lib/response.js
index 44696a55f..f6bb6efd6 100644
--- a/lib/response.js
+++ b/lib/response.js
@@ -156,9 +156,13 @@ function gitlabActionProjects (req, res, note) {
if (!user) {
return errors.errorNotFound(res)
}
- const ret = { baseURL: config.gitlab.baseURL, version: config.gitlab.version }
- ret.accesstoken = user.accessToken
- ret.profileid = user.profileid
+ const ret = {
+ baseURL: config.gitlab.baseURL,
+ version: config.gitlab.version,
+ accesstoken: user.accessToken,
+ profileid: user.profileid,
+ projects: []
+ }
const apiUrl = `${config.gitlab.baseURL}/api/${config.gitlab.version}/projects?membership=yes&per_page=100&access_token=${user.accessToken}`
fetch(apiUrl).then(resp => {
if (!resp.ok) {
diff --git a/public/docs/release-notes.md b/public/docs/release-notes.md
index a6cc80720..e31a33789 100644
--- a/public/docs/release-notes.md
+++ b/public/docs/release-notes.md
@@ -6,6 +6,7 @@
- Fix error that Libravatar user avatars were not shown when using OAuth2 login
- Fix `bin/manage_users` not accepting numeric passwords (thanks to [@carr0t2](https://github.com/carr0t2) for reporting)
- Fix visibility of modals for screen readers
+- Fix GitLab snippet export (thanks to [@semjongeist](https://github.com/semjongeist) for reporting)
- Fix missing inline authorship colors (thanks to [@EBendinelli](https://github.com/EBendinelli) for reporting)
### Enhancements
diff --git a/public/js/index.js b/public/js/index.js
index de2a35221..763093805 100644
--- a/public/js/index.js
+++ b/public/js/index.js
@@ -1921,9 +1921,12 @@ $('#snippetExportModalConfirm').click(function () {
const data = {
title: $('#snippetExportModalTitle').val(),
- file_name: $('#snippetExportModalFileName').val(),
- code: editor.getValue(),
- visibility_level: $('#snippetExportModalVisibility').val(),
+ files: [
+ {
+ file_path: $('#snippetExportModalFileName').val(),
+ content: editor.getValue()
+ }
+ ],
visibility:
$('#snippetExportModalVisibility').val() === '0'
? 'private'
@@ -1934,40 +1937,27 @@ $('#snippetExportModalConfirm').click(function () {
if (
!data.title ||
- !data.file_name ||
- !data.code ||
- !data.visibility_level ||
+ !data.files[0].file_path ||
+ !data.files[0].content ||
!$('#snippetExportModalProjects').val()
) { return }
$('#snippetExportModalLoading').show()
- const fullURL =
- baseURL +
- '/api/' +
- version +
- '/projects/' +
- $('#snippetExportModalProjects').val() +
- '/snippets?access_token=' +
- accesstoken
- $.post(fullURL, data, function (ret) {
- $('#snippetExportModalLoading').hide()
- $('#snippetExportModal').modal('hide')
- const redirect =
- baseURL +
- '/' +
- $(
- "#snippetExportModalProjects option[value='" +
- $('#snippetExportModalProjects').val() +
- "']"
- ).text() +
- '/snippets/' +
- ret.id
- showMessageModal(
- ' Export to Snippet',
- 'Export Successful!',
- redirect,
- 'View Snippet Here',
- true
- )
+ const fullURL = `${baseURL}/api/${version}/projects/${$('#snippetExportModalProjects').val()}/snippets?access_token=${accesstoken}`
+ $.ajax(fullURL, {
+ data: JSON.stringify(data),
+ contentType: 'application/json',
+ type: 'POST',
+ success: function (ret) {
+ $('#snippetExportModalLoading').hide()
+ $('#snippetExportModal').modal('hide')
+ showMessageModal(
+ ' Export to Snippet',
+ 'Export Successful!',
+ ret.web_url,
+ 'View Snippet Here',
+ true
+ )
+ }
})
})
diff --git a/test/csp.js b/test/csp.js
index a1edc9e95..afb959264 100644
--- a/test/csp.js
+++ b/test/csp.js
@@ -29,6 +29,9 @@ describe('Content security policies', function () {
},
dropbox: {
appKey: undefined
+ },
+ gitlab: {
+ baseURL: undefined
}
}
})