1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-24 12:58:34 +00:00
Files
seahub/frontend/src/utils/wiki-api.js
2025-07-17 15:49:02 +08:00

330 lines
9.0 KiB
JavaScript

import cookie from 'react-cookies';
import axios from 'axios';
import FormData from 'form-data';
import { siteRoot } from './constants';
class WikiAPI {
init({ server, username, password, token }) {
this.server = server;
this.username = username;
this.password = password;
this.token = token; // none
if (this.token && this.server) {
this.req = axios.create({
baseURL: this.server,
headers: { 'Authorization': 'Token ' + this.token },
});
}
return this;
}
initForSeahubUsage({ siteRoot, xcsrfHeaders }) {
if (siteRoot && siteRoot.charAt(siteRoot.length - 1) === '/') {
var server = siteRoot.substring(0, siteRoot.length - 1);
this.server = server;
} else {
this.server = siteRoot;
}
this.req = axios.create({
headers: {
'X-CSRFToken': xcsrfHeaders,
}
});
return this;
}
_sendPostRequest(url, form) {
if (form.getHeaders) {
return this.req.post(url, form, {
headers: form.getHeaders()
});
} else {
return this.req.post(url, form);
}
}
listWikiDepartments() {
const url = this.server + '/api/v2.1/departments/';
const params = { can_admin: true };
return this.req.get(url, { params: params });
}
listWikiDir(wikiId, dirPath, withParents) {
const path = encodeURIComponent(dirPath);
let url = this.server + '/api/v2.1/wikis/' + wikiId + '/dir/?p=' + path;
if (withParents) {
url = this.server + '/api/v2.1/wikis/' + wikiId + '/dir/?p=' + path + '&with_parents=' + withParents;
}
return this.req.get(url);
}
getWikiFileContent(wikiId, filePath) {
const path = encodeURIComponent(filePath);
const time = new Date().getTime();
const url = this.server + '/api/v2.1/wikis/' + wikiId + '/content/' + '?p=' + path + '&_=' + time;
return this.req.get(url);
}
listWikis(options) {
/*
* options: `{type: 'shared'}`, `{type: ['mine', 'shared', ...]}`
*/
let url = this.server + '/api/v2.1/wikis/';
if (!options) {
// fetch all types of wikis
return this.req.get(url);
}
return this.req.get(url, {
params: options,
paramsSerializer: {
serialize: function (params) {
let list = [];
for (let key in params) {
if (Array.isArray(params[key])) {
for (let i = 0, len = params[key].length; i < len; i++) {
list.push(key + '=' + encodeURIComponent(params[key][i]));
}
} else {
list.push(key + '=' + encodeURIComponent(params[key]));
}
}
return list.join('&');
}
}
});
}
addWiki(wikiName) {
const url = this.server + '/api/v2.1/wikis/';
let form = new FormData();
form.append('name', wikiName);
return this._sendPostRequest(url, form);
}
renameWiki(wikiId, wikiName) {
const url = this.server + '/api/v2.1/wikis/' + wikiId + '/';
let form = new FormData();
form.append('wiki_name', wikiName);
return this._sendPostRequest(url, form);
}
deleteWiki(wikiId) {
const url = this.server + '/api/v2.1/wikis/' + wikiId + '/';
return this.req.delete(url);
}
// for wiki2
listWikis2(options) {
/*
* options: `{type: 'shared'}`, `{type: ['mine', 'shared', ...]}`
*/
let url = this.server + '/api/v2.1/wikis2/';
if (!options) {
// fetch all types of wikis
return this.req.get(url);
}
return this.req.get(url, {
params: options,
paramsSerializer: {
serialize: function (params) {
let list = [];
for (let key in params) {
if (Array.isArray(params[key])) {
for (let i = 0, len = params[key].length; i < len; i++) {
list.push(key + '=' + encodeURIComponent(params[key][i]));
}
} else {
list.push(key + '=' + encodeURIComponent(params[key]));
}
}
return list.join('&');
}
}
});
}
addWiki2(wikiName, owner) {
const url = this.server + '/api/v2.1/wikis2/';
let form = new FormData();
form.append('name', wikiName);
if (owner) {
form.append('owner', owner);
}
return this._sendPostRequest(url, form);
}
deleteWiki2(wikiId) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/';
return this.req.delete(url);
}
updateWiki2Config(wikiId, wikiConfig) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/config/';
let params = {
wiki_config: wikiConfig
};
return this.req.put(url, params);
}
getWiki2Config(wikiId) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/config/';
return this.req.get(url);
}
getWiki2PublishConfig(wikiId) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/publish/config/';
return this.req.get(url);
}
createWiki2Page(wikiId, pageName, currentId, insertPosition) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/pages/';
let form = new FormData();
form.append('page_name', pageName);
if (currentId) {
form.append('current_id', currentId);
}
if (insertPosition) {
form.append('insert_position', insertPosition);
}
return this._sendPostRequest(url, form);
}
deleteWiki2Page(wikiId, pageId) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/page/' + pageId + '/';
return this.req.delete(url);
}
moveWiki2Page(wikiId, moved_id, target_id, move_position) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/pages/';
let params = {
'moved_id': moved_id,
'target_id': target_id,
'move_position': move_position
};
return this.req.put(url, params);
}
deleteWiki2Folder(wikiId, folderId) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/folder/' + folderId + '/';
return this.req.delete(url);
}
getWiki2Page(wikiId, pageId) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/page/' + pageId + '/';
return this.req.get(url);
}
getWiki2PublishPage(wikiId, pageId) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/publish/page/' + pageId + '/';
return this.req.get(url);
}
updateWiki2PageLock(wikiId, pageId, locked) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/page/' + pageId + '/';
let params = {
is_lock_page: locked
};
return this.req.put(url, params);
}
renameWiki2(wikiId, wikiName) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/';
let params = {
wiki_name: wikiName
};
return this.req.put(url, params);
}
duplicateWiki2Page(wikiId, pageId) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/duplicate-page/';
let form = new FormData();
form.append('page_id', pageId);
return this._sendPostRequest(url, form);
}
importWiki2Page(wikiId, pageId, file) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/import-page/';
let form = new FormData();
form.append('from_page_id', pageId);
if (file) {
form.append('file', file);
}
return this._sendPostRequest(url, form);
}
getWikiTrash(wikiId, page, per_page) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/trash/';
let params = {
page: page || 1,
per_page: per_page
};
return this.req.get(url, { params: params });
}
revertTrashPage(wikiId, page_id) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/trash/';
let params = {
page_id: page_id
};
return this.req.put(url, params);
}
cleanWikiTrash(wikiId, days) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/trash/';
let params = {
keep_days: days
};
return this.req.delete(url, {
data: params
});
}
publishWiki(wikiId, publish_url) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/publish/';
let form = new FormData();
form.append('publish_url', publish_url);
return this._sendPostRequest(url, form);
}
getPublishWikiLink(wikiId) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/publish/';
return this.req.get(url);
}
deletePublishWikiLink(wikiId, customUrl) {
const url = this.server + '/api/v2.1/wiki2/' + wikiId + '/publish/';
return this.req.delete(url);
}
convertWiki(oldWikiId, wikiName, owner) {
const url = this.server + '/api/v2.1/convert-wiki/';
let form = new FormData();
form.append('old_wiki_id', oldWikiId);
form.append('name', wikiName);
if (owner) {
form.append('owner', owner);
}
return this._sendPostRequest(url, form);
}
importConfluence(file, departmentID) {
const url = this.server + '/api/v2.1/import-confluence/';
const formData = new FormData();
formData.append('file', file);
formData.append('group_id', departmentID);
return this._sendPostRequest(url, formData);
}
}
let wikiAPI = new WikiAPI();
let xcsrfHeaders = cookie.load('sfcsrftoken');
wikiAPI.initForSeahubUsage({ siteRoot, xcsrfHeaders });
export default wikiAPI;