1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-04-27 11:01:14 +00:00
seahub/frontend/src/utils/seafile-api.js
Michael An 7ff4b52005
basic file support comment (#7731)
* basic file support comment

* 01 add init loading icon

* delete useless comment

* 02 delete comment tip

* update api validation

* 03 update API params

* 04 delete useless api

* 05 remove read all notification

* 06 change comment and reply permission

* 07 change docUuid to fileUuid

---------

Co-authored-by: r350178982 <32759763+r350178982@users.noreply.github.com>
2025-04-21 21:33:13 +08:00

2232 lines
69 KiB
JavaScript

import axios from 'axios';
import FormData from 'form-data';
import cookie from 'react-cookies';
import { siteRoot } from './constants';
class SeafileAPI {
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);
}
}
getAuthTokenBySession() {
const url = this.server + '/api/v2.1/auth-token-by-session/';
return this.req.get(url);
}
createAuthTokenBySession() {
const url = this.server + '/api/v2.1/auth-token-by-session/';
return this.req.post(url);
}
deleteAuthTokenBySession() {
const url = this.server + '/api/v2.1/auth-token-by-session/';
return this.req.delete(url);
}
/**
* Login to server and create axios instance for future usage
*/
login() {
const url = this.server + '/api2/auth-token/';
return axios.post(url, {
username: this.username,
password: this.password
}).then((response) => {
this.token = response.data.token;
this.req = axios.create({
baseURL: this.server,
headers: { 'Authorization': 'Token ' + this.token }
});
});
}
authPing() {
const url = this.server + '/api2/auth/ping/';
return this.req.get(url);
}
// ---- Account API
getAccountInfo() {
const url = this.server + '/api2/account/info/';
return this.req.get(url);
}
listDepartments() {
const url = this.server + '/api/v2.1/departments/';
return this.req.get(url);
}
listAddressBookDepartments() {
const url = this.server + '/api/v2.1/address-book/departments/';
return this.req.get(url);
}
listAddressBookDepartmentMembers(department_id) {
const url = this.server + '/api/v2.1/address-book/departments/' + department_id + '/members/';
return this.req.get(url);
}
listGroups(withRepos = false) {
let options = { with_repos: withRepos ? 1 : 0 };
const url = this.server + '/api/v2.1/groups/';
return this.req.get(url, { params: options });
}
listGroupRepos(groupID, page, perPage) {
const url = this.server + '/api/v2.1/groups/' + groupID + '/libraries/';
let params = {
};
if (page != undefined) {
params.page = page;
}
if (perPage != undefined) {
params.per_page = perPage;
}
return this.req.get(url, { params: params });
}
getGroup(groupID) {
const url = this.server + '/api/v2.1/groups/' + groupID + '/';
return this.req.get(url);
}
createGroup(name) {
const url = this.server + '/api/v2.1/groups/';
let form = new FormData();
form.append('name', name);
return this._sendPostRequest(url, form);
}
renameGroup(groupID, name) {
const url = this.server + '/api/v2.1/groups/' + groupID + '/';
const params = {
name: name
};
return this.req.put(url, params);
}
deleteGroup(groupID) {
const url = this.server + '/api/v2.1/groups/' + groupID + '/';
return this.req.delete(url);
}
transferGroup(groupID, ownerName) {
const url = this.server + '/api/v2.1/groups/' + groupID + '/';
const params = {
owner: ownerName
};
return this.req.put(url, params);
}
quitGroup(groupID, userName) {
const name = encodeURIComponent(userName);
const url = this.server + '/api/v2.1/groups/' + groupID + '/members/' + name + '/';
return this.req.delete(url);
}
listGroupMembers(groupID, page, perPage, isAdmin = false, avatarSize = 64) {
let url = this.server + '/api/v2.1/groups/' + groupID + '/members/';
let params = {
page: page || 1,
per_page: perPage || 100,
is_admin: isAdmin,
avatar_size: avatarSize
};
return this.req.get(url, { params: params });
}
searchGroupMember(groupID, q) {
const url = this.server + '/api/v2.1/groups/' + groupID + '/search-member/';
const params = {
q: q
};
return this.req.get(url, { params: params });
}
addGroupMember(groupID, userName) {
const url = this.server + '/api/v2.1/groups/' + groupID + '/members/';
const params = {
email: userName
};
return this.req.post(url, params);
}
addGroupMembers(groupID, userNames) {
const url = this.server + '/api/v2.1/groups/' + groupID + '/members/bulk/';
let form = new FormData();
form.append('emails', userNames.join(','));
return this._sendPostRequest(url, form);
}
importGroupMembersViaFile(groupID, file) {
const url = this.server + '/api/v2.1/groups/' + groupID + '/members/import/';
let formData = new FormData();
formData.append('file', file);
return this._sendPostRequest(url, formData);
}
deleteGroupMember(groupID, userName) {
const name = encodeURIComponent(userName);
const url = this.server + '/api/v2.1/groups/' + groupID + '/members/' + name + '/';
return this.req.delete(url);
}
setGroupAdmin(groupID, userName, isAdmin) {
let name = encodeURIComponent(userName);
let url = this.server + '/api/v2.1/groups/' + groupID + '/members/' + name + '/';
const params = {
is_admin: isAdmin
};
return this.req.put(url, params);
}
createGroupOwnedLibrary(groupID, repo) {
let repoName = repo.repo_name;
let permission = repo.permission ? repo.permission : 'rw';
const url = this.server + '/api/v2.1/groups/' + groupID + '/group-owned-libraries/';
let form = new FormData();
form.append('name', repoName); // need to modify endpoint api;
if (repo.passwd) {
form.append('passwd', repo.passwd);
}
form.append('permission', permission);
if (repo.library_template) {
form.append('library_template', repo.library_template);
}
return this._sendPostRequest(url, form);
}
deleteGroupOwnedLibrary(groupID, repoID) {
const url = this.server + '/api/v2.1/groups/' + groupID + '/group-owned-libraries/' + repoID + '/';
return this.req.delete(url);
}
renameGroupOwnedLibrary(groupID, repoID, newName) {
const url = this.server + '/api/v2.1/groups/' + groupID + '/group-owned-libraries/' + repoID + '/';
let form = new FormData();
form.append('name', newName);
return this.req.put(url, form);
}
shareGroupOwnedRepoToUser(repoID, permission, username, path) {
const url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/user-share/';
let form = new FormData();
form.append('permission', permission);
form.append('path', path);
if (Array.isArray(username)) {
username.forEach(item => {
form.append('username', item);
});
} else {
form.append('username', username);
}
return this._sendPostRequest(url, form);
}
modifyGroupOwnedRepoUserSharedPermission(repoID, permission, username, path) { // need check
const url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/user-share/';
let form = new FormData();
form.append('permission', permission);
form.append('username', username);
form.append('path', path);
return this.req.put(url, form);
}
deleteGroupOwnedRepoSharedUserItem(repoID, username, path) {
const url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/user-share/';
let params = { username: username, path: path };
return this.req.delete(url, { data: params });
}
shareGroupOwnedRepoToGroup(repoID, permission, groupIDs, path) {
const url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/group-share/';
let form = new FormData();
form.append('permission', permission);
form.append('path', path);
groupIDs.forEach(item => {
form.append('group_id', item);
});
return this._sendPostRequest(url, form);
}
modifyGroupOwnedRepoGroupSharedPermission(repoID, permission, groupID, path) { // need check
const url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/group-share/';
let form = new FormData();
form.append('permission', permission);
form.append('group_id', groupID);
form.append('path', path);
return this.req.put(url, form);
}
deleteGroupOwnedRepoSharedGroupItem(repoID, groupID, path) {
const url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/group-share/';
let params = { group_id: groupID, path: path };
return this.req.delete(url, { data: params });
}
deleteGroupInviteLinks(groupID, token) {
const url = `${this.server}/api/v2.1/groups/${groupID}/invite-links/${token}/`;
return this.req.delete(url);
}
addGroupInviteLinks(groupID) {
const url = `${this.server}/api/v2.1/groups/${groupID}/invite-links/`;
let formData = new FormData();
return this._sendPostRequest(url, formData);
}
getGroupInviteLinks(groupID) {
const url = `${this.server}/api/v2.1/groups/${groupID}/invite-links/`;
return this.req.get(url);
}
// ---- share operation
listShareLinks({ repoID, path, page, perPage }) {
const url = this.server + '/api/v2.1/share-links/';
const params = {
};
if (repoID && path) {
params.repo_id = repoID;
params.path = path;
}
params.page = page || 1;
params.per_page = perPage || 25;
return this.req.get(url, { params: params });
}
createMultiShareLink(repoID, path, password, expirationTime, permissions) {
const url = this.server + '/api/v2.1/multi-share-links/';
let form = new FormData();
form.append('path', path);
form.append('repo_id', repoID);
if (permissions) {
form.append('permissions', permissions);
}
if (password) {
form.append('password', password);
}
if (expirationTime) {
form.append('expiration_time', expirationTime);
}
return this._sendPostRequest(url, form);
}
batchCreateMultiShareLink(repoID, path, shareLinkNum, autoGeneratePassword, expirationTime, permissions) {
const url = this.server + '/api/v2.1/multi-share-links/batch/';
let form = new FormData();
form.append('path', path);
form.append('repo_id', repoID);
form.append('number', shareLinkNum);
form.append('auto_generate_password', autoGeneratePassword);
if (permissions) {
form.append('permissions', permissions);
}
if (expirationTime) {
form.append('expiration_time', expirationTime);
}
return this._sendPostRequest(url, form);
}
createShareLink(repoID, path, password, expirationTime, permissions) {
const url = this.server + '/api/v2.1/share-links/';
let form = new FormData();
form.append('path', path);
form.append('repo_id', repoID);
if (permissions) {
form.append('permissions', permissions);
}
if (password) {
form.append('password', password);
}
if (expirationTime) {
form.append('expiration_time', expirationTime);
}
return this._sendPostRequest(url, form);
}
updateShareLink(token, permissions, expirationTime = '') {
var url = this.server + '/api/v2.1/share-links/' + token + '/';
let form = new FormData();
if (permissions) {
form.append('permissions', permissions);
}
if (expirationTime) {
form.append('expiration_time', expirationTime);
}
return this.req.put(url, form);
}
deleteShareLink(token) {
const url = this.server + '/api/v2.1/share-links/' + token + '/';
return this.req.delete(url);
}
deleteShareLinks(tokens) {
const url = this.server + '/api/v2.1/share-links/';
let param = { tokens: tokens };
return this.req.delete(url, { data: param });
}
cleanInvalidShareLinks() {
const url = this.server + '/api/v2.1/share-links/clean-invalid/';
return this.req.delete(url);
}
sendShareLink(token, email, extraMsg) {
const url = this.server + '/api2/send-share-link/';
let form = new FormData();
form.append('token', token);
form.append('email', email);
if (extraMsg) {
form.append('extra_msg', extraMsg);
}
return this._sendPostRequest(url, form);
}
// for repo & folder
getRepoFolderShareInfo(repoID, path) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/share-info/';
let params = { };
if (path != undefined) {
params.path = path;
}
return this.req.get(url, { params: params });
}
listRepoShareLinks(repoID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/share-links/';
return this.req.get(url);
}
deleteRepoShareLink(repoID, token) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/share-links/' + token + '/';
return this.req.delete(url);
}
listSharedRepos() {
const url = this.server + '/api/v2.1/shared-repos/';
return this.req.get(url);
}
getShareLinkRepoTags(token) {
var url = this.server + '/api/v2.1/share-links/' + token + '/repo-tags/';
return this.req.get(url);
}
getShareLinkTaggedFiles(token, tag_id) {
var url = this.server + '/api/v2.1/share-links/' + token + '/tagged-files/' + tag_id + '/';
return this.req.get(url);
}
getAllRepoFolderShareInfo(repoID, shareTo) {
const url = this.server + '/api/v2.1/repo-folder-share-info/';
let params = {
repo_id: repoID
};
if (shareTo) {
params.share_to = shareTo;
}
return this.req.get(url, { params: params });
}
// upload-link
listUserUploadLinks() {
const url = this.server + '/api/v2.1/upload-links/';
return this.req.get(url);
}
getUploadLink(repoID, path) {
const url = this.server + '/api/v2.1/upload-links/?repo_id=' + repoID + '&path=' + encodeURIComponent(path);
return this.req.get(url);
}
createUploadLink(repoID, path, password, expirationTime) {
const url = this.server + '/api/v2.1/upload-links/';
let form = new FormData();
form.append('path', path);
form.append('repo_id', repoID);
if (password) {
form.append('password', password);
}
if (expirationTime) {
form.append('expiration_time', expirationTime);
}
return this._sendPostRequest(url, form);
}
updateUploadLink(token, expirationTime) {
var url = this.server + '/api/v2.1/upload-links/' + token + '/';
let form = new FormData();
form.append('expiration_time', expirationTime);
return this.req.put(url, form);
}
deleteUploadLink(token) {
const url = this.server + '/api/v2.1/upload-links/' + token + '/';
return this.req.delete(url);
}
cleanInvalidUploadLinks() {
const url = this.server + '/api/v2.1/upload-links/clean-invalid/';
return this.req.delete(url);
}
sendUploadLink(token, email, extraMsg) {
const url = this.server + '/api2/send-upload-link/';
let form = new FormData();
form.append('token', token);
form.append('email', email);
if (extraMsg) {
form.append('extra_msg', extraMsg);
}
return this._sendPostRequest(url, form);
}
listRepoUploadLinks(repoID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/upload-links/';
return this.req.get(url);
}
deleteRepoUploadLink(repoID, token) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/upload-links/' + token + '/';
return this.req.delete(url);
}
// todo send upload link email
// shared-libraries
listSharedItems(repoID, path, shareType) { // shareType: user, group
path = encodeURIComponent(path);
const url = this.server + '/api2/repos/' + repoID + '/dir/shared_items/?p=' + path + '&share_type=' + shareType;
return this.req.get(url);
}
getBeSharedRepos() { // listBeSharedRepos
const url = this.server + '/api2/beshared-repos/';
return this.req.get(url);
}
leaveShareRepo(repoID, options) { // deleteBeSharedRepo
const url = this.server + '/api2/beshared-repos/' + repoID + '/';
return this.req.delete(url, { params: options });
}
// share repo to user is same to share Folder
// unshare repo to user is same to unshare Folder
deleteShareToUserItem(repoID, path, shareType, username) {
path = encodeURIComponent(path);
const url = this.server + '/api2/repos/' + repoID + '/dir/shared_items/?p=' + path + '&share_type=' + shareType + '&username=' + encodeURIComponent(username);
return this.req.delete(url);
}
updateShareToUserItemPermission(repoID, path, shareType, username, permission) {
path = encodeURIComponent(path);
const url = this.server + '/api2/repos/' + repoID + '/dir/shared_items/?p=' + path + '&share_type=' + shareType + '&username=' + encodeURIComponent(username);
let form = new FormData();
form.append('permission', permission);
return this._sendPostRequest(url, form);
}
// share repo to group is same to share folder
// unshare repo to group is same to unshare folder
deleteShareToGroupItem(repoID, path, shareType, groupID) {
path = encodeURIComponent(path);
const url = this.server + '/api2/repos/' + repoID + '/dir/shared_items/?p=' + path + '&share_type=' + shareType + '&group_id=' + groupID;
return this.req.delete(url);
}
updateShareToGroupItemPermission(repoID, path, shareType, groupID, permission) {
path = encodeURIComponent(path);
const url = this.server + '/api2/repos/' + repoID + '/dir/shared_items/?p=' + path + '&share_type=' + shareType + '&group_id=' + groupID;
let form = new FormData();
form.append('permission', permission);
return this._sendPostRequest(url, form);
}
leaveShareGroupOwnedRepo(repoID) {
const url = this.server + '/api/v2.1/group-owned-libraries/user-share-in-libraries/' + repoID + '/';
return this.req.delete(url);
}
shareableGroups() {
const url = this.server + '/api/v2.1/shareable-groups/';
return this.req.get(url);
}
getSharedRepos() {
const url = this.server + '/api2/shared-repos/';
return this.req.get(url);
}
updateRepoSharePerm(repoID, options) {
const url = this.server + '/api/v2.1/shared-repos/' + repoID + '/';
return this.req.put(url, options);
}
unshareRepo(repoID, options) {
const url = this.server + '/api/v2.1/shared-repos/' + repoID + '/';
return this.req.delete(url, { params: options });
}
unshareRepoToGroup(repoID, groupID) {
const url = this.server + '/api/v2.1/groups/' + groupID + '/libraries/' + repoID + '/';
return this.req.delete(url);
}
// shared folders
shareFolder(repoID, path, shareType, permission, paramArray) { // shareType: user group
path = encodeURIComponent(path);
var form = new FormData();
form.append('share_type', shareType);
form.append('permission', permission);
if (shareType == 'user') {
for (let i = 0; i < paramArray.length; i++) {
form.append('username', paramArray[i]);
}
} else {
for (let i = 0; i < paramArray.length; i++) {
form.append('group_id', paramArray[i]);
}
}
const url = this.server + '/api2/repos/' + repoID + '/dir/shared_items/?p=' + path;
return this.req.put(url, form);
}
listSharedFolders() {
const url = this.server + '/api/v2.1/shared-folders/';
return this.req.get(url);
}
updateFolderSharePerm(repoID, data, options) {
const url = this.server + '/api2/repos/' + repoID + '/dir/shared_items/';
return this.req.post(url, data, { params: options }); // due to the old api, use 'post' here
}
unshareFolder(repoID, options) {
const url = this.server + '/api2/repos/' + repoID + '/dir/shared_items/';
return this.req.delete(url, { params: options });
}
listCustomPermissions(repoID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/custom-share-permissions/';
return this.req.get(url);
}
createCustomPermission(repoID, permission_name, permission_desc, permission) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/custom-share-permissions/';
const data = {
permission_name: permission_name,
description: permission_desc,
permission: JSON.stringify(permission)
};
return this.req.post(url, data);
}
getCustomPermission(repoID, permissionID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/custom-share-permissions/' + permissionID + '/';
return this.req.get(url);
}
deleteCustomPermission(repoID, permissionID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/custom-share-permissions/' + permissionID + '/';
return this.req.delete(url);
}
updateCustomPermission(repoID, permission) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/custom-share-permissions/' + permission.id + '/';
const data = {
permission_name: permission.name,
description: permission.description,
permission: JSON.stringify(permission.permission)
};
return this.req.put(url, data);
}
// ---- repo(library) operation
createMineRepo(repo) {
const url = this.server + '/api2/repos/?from=web';
return this.req.post(url, repo);
}
createGroupRepo(groupID, repo) {
const url = this.server + '/api/v2.1/groups/' + groupID + '/libraries/';
let form = new FormData();
form.append('repo_name', repo.repo_name);
if (repo.password) {
form.append('password', repo.password);
}
form.append('permission', repo.permission);
if (repo.library_template) {
form.append('library_template', repo.library_template);
}
return this._sendPostRequest(url, form);
}
listRepos(options) {
/*
* options: `{type: 'shared'}`, `{type: ['mine', 'shared', ...]}`
*/
let url = this.server + '/api/v2.1/repos/';
if (!options) {
// fetch all types of repos
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('&');
}
}
});
}
getRepoInfo(repoID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/';
return this.req.get(url);
}
getRepoHistoryLimit(repoID) {
const url = this.server + '/api2/repos/' + repoID + '/history-limit/';
return this.req.get(url);
}
setRepoHistoryLimit(repoID, historyDays) {
const url = this.server + '/api2/repos/' + repoID + '/history-limit/';
let form = new FormData();
form.append('keep_days', historyDays);
return this.req.put(url, form);
}
resetAndSendEncryptedRepoPassword(repoID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/send-new-password/';
let form = new FormData();
return this._sendPostRequest(url, form);
}
deleteRepo(repoID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/';
return this.req.delete(url);
}
renameRepo(repoID, newName) {
const url = this.server + '/api2/repos/' + repoID + '/?op=rename';
let form = new FormData();
form.append('repo_name', newName);
return this._sendPostRequest(url, form);
}
transferRepo(repoID, owner) {
const url = this.server + '/api2/repos/' + repoID + '/owner/';
let form = new FormData();
form.append('owner', owner);
return this.req.put(url, form);
}
setRepoDecryptPassword(repoID, password) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/set-password/';
let form = new FormData();
form.append('password', password);
return this._sendPostRequest(url, form);
}
changeEncryptedRepoPassword(repoID, oldPassword, newPassword) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/set-password/';
const data = {
'old_password': oldPassword,
'new_password': newPassword
};
return this.req.put(url, data);
}
createPublicRepo(repo) {
const url = this.server + '/api2/repos/public/';
return this.req.post(url, repo);
}
selectOwnedRepoToPublic(repoID, options) { // todo change a exist repo to public
const url = this.server + '/api/v2.1/shared-repos/' + repoID + '/';
return this.req.put(url, options);
}
// remove public repo is same to unshareRepo;
getSource() { // for search
let CancelToken = axios.CancelToken;
let source = CancelToken.source();
return source;
}
searchFilesInPublishedRepo(repoID, q, page, perPage, searchFilenameOnly) {
const url = this.server + '/api/v2.1/published-repo-search/';
let params = {
repo_id: repoID,
q: q,
page: page,
per_page: perPage,
search_filename_only: searchFilenameOnly || false,
};
return this.req.get(url, { params: params });
}
searchFiles(searchParams, cancelToken) {
let url = this.server + '/api2/search/';
url = url + '?q=' + searchParams.q;
if (searchParams.search_repo) {url = url + '&search_repo=' + searchParams.search_repo;}
if (searchParams.search_ftypes) {url = url + '&search_ftypes=' + searchParams.search_ftypes;}
if (searchParams.page) {url = url + '&page=' + searchParams.page;}
if (searchParams.per_page) {url = url + '&per_page=' + searchParams.per_page;}
if (searchParams.search_path) {url = url + '&search_path=' + searchParams.search_path;}
if (searchParams.obj_type) {url = url + '&obj_type=' + searchParams.obj_type;}
if (searchParams.input_fexts) {url = url + '&input_fexts=' + searchParams.input_fexts;}
if (searchParams.with_permission) {url = url + '&with_permission=' + searchParams.with_permission;}
if (searchParams.time_from) {url = url + '&time_from=' + searchParams.time_from;}
if (searchParams.time_to) {url = url + '&time_to=' + searchParams.time_to;}
if (searchParams.size_from) {url = url + '&size_from=' + searchParams.size_from;}
if (searchParams.size_to) {url = url + '&size_to=' + searchParams.size_to;}
if (searchParams.shared_from) {url = url + '&shared_from=' + searchParams.shared_from;}
if (searchParams.not_shared_from) {url = url + '&not_shared_from=' + searchParams.not_shared_from;}
if (searchParams.search_filename_only) {url = url + '&search_filename_only=' + searchParams.search_filename_only;}
if (searchParams.ftype) {
for (let i = 0; i < searchParams.ftype.length; i++) {
url = url + '&ftype=' + searchParams.ftype[i];}
}
return this.req.get(url, { cancelToken: cancelToken });
}
searchFileInRepo(repoID, q) {
const url = this.server + '/api/v2.1/search-file/';
const params = {
repo_id: repoID,
q: q
};
return this.req.get(url, { params: params });
}
listRepoAPITokens(repo_id) {
var url = this.server + '/api/v2.1/repos/' + repo_id + '/repo-api-tokens/';
return this.req.get(url);
}
addRepoAPIToken(repo_id, app_name, permission) {
var url = this.server + '/api/v2.1/repos/' + repo_id + '/repo-api-tokens/';
var form = new FormData();
form.append('app_name', app_name);
form.append('permission', permission);
return this._sendPostRequest(url, form);
}
deleteRepoAPIToken(repo_id, app_name) {
var url = this.server + '/api/v2.1/repos/' + repo_id + '/repo-api-tokens/' + app_name + '/';
return this.req.delete(url);
}
updateRepoAPIToken(repo_id, app_name, permission) {
var url = this.server + '/api/v2.1/repos/' + repo_id + '/repo-api-tokens/' + app_name + '/';
var form = new FormData();
form.append('permission', permission);
return this.req.put(url, form);
}
// admin
listDeletedRepo() {
const url = this.server + '/api/v2.1/deleted-repos/';
return this.req.get(url);
}
restoreDeletedRepo(repoID) {
const url = this.server + '/api/v2.1/deleted-repos/';
let form = new FormData();
form.append('repo_id', repoID);
return this._sendPostRequest(url, form);
}
// ---- directory operation
listDir(repoID, dirPath, { recursive = false, type = '', with_thumbnail = false, with_parents = false } = {}) {
/*
* opts: `{recursive: true}`, `{'with_thumbnail': true}`
*/
const url = this.server + '/api/v2.1/repos/' + repoID + '/dir/';
let params = {};
params.p = dirPath;
if (recursive) {
params.recursive = recursive ? 1 : 0;
}
if (type) {
params.t = type;
}
if (with_thumbnail) {
params.with_thumbnail = with_thumbnail;
}
if (with_parents) {
params.with_parents = with_parents;
}
return this.req.get(url, { params: params });
}
listWikiDir(slug, dirPath, withParents) {
const path = encodeURIComponent(dirPath);
let url = this.server + '/api/v2.1/wikis/' + encodeURIComponent(slug) + '/dir/?p=' + path;
if (withParents) {
url = this.server + '/api/v2.1/wikis/' + encodeURIComponent(slug) + '/dir/?p=' + path + '&with_parents=' + withParents;
}
return this.req.get(url);
}
getDirInfo(repoID, dirPath) {
const path = encodeURIComponent(dirPath);
const url = this.server + '/api/v2.1/repos/' + repoID + '/dir/detail/?path=' + path;
return this.req.get(url);
}
createDir(repoID, dirPath) {
const path = encodeURIComponent(dirPath);
const url = this.server + '/api2/repos/' + repoID + '/dir/?p=' + path;
let form = new FormData();
form.append('operation', 'mkdir');
return this._sendPostRequest(url, form);
}
renameDir(repoID, dirPath, newdirName) {
const path = encodeURIComponent(dirPath);
const url = this.server + '/api2/repos/' + repoID + '/dir/?p=' + path;
let form = new FormData();
form.append('operation', 'rename');
form.append('newname', newdirName);
return this._sendPostRequest(url, form);
}
deleteDir(repoID, dirPath) {
const path = encodeURIComponent(dirPath);
const url = this.server + '/api/v2.1/repos/' + repoID + '/dir/?p=' + path;
return this.req.delete(url);
}
// ---- multiple(File&Folder) operation
copyDir(repoID, dstrepoID, dstfilePath, dirPath, direntNames) {
let paths = [];
let url = this.server;
url += repoID === dstrepoID ? '/api/v2.1/repos/sync-batch-copy-item/' : '/api/v2.1/repos/async-batch-copy-item/';
if (Array.isArray(direntNames)) {
paths = direntNames;
} else {
paths.push(direntNames);
}
let operation = {
'src_repo_id': repoID,
'src_parent_dir': dirPath,
'dst_repo_id': dstrepoID,
'dst_parent_dir': dstfilePath,
'src_dirents': paths
};
return this._sendPostRequest(url, operation, { headers: { 'Content-Type': 'application/json' } });
}
moveDir(repoID, dstrepoID, dstfilePath, dirPath, direntNames) {
let paths = [];
let url = this.server;
url += repoID === dstrepoID ? '/api/v2.1/repos/sync-batch-move-item/' : '/api/v2.1/repos/async-batch-move-item/';
if (Array.isArray(direntNames)) {
paths = direntNames;
} else {
paths.push(direntNames);
}
let operation = {
'src_repo_id': repoID,
'src_parent_dir': dirPath,
'dst_repo_id': dstrepoID,
'dst_parent_dir': dstfilePath,
'src_dirents': paths
};
return this._sendPostRequest(url, operation, { headers: { 'Content-Type': 'application/json' } });
}
queryAsyncOperationProgress(task_id) {
const url = this.server + '/api/v2.1/query-copy-move-progress/?task_id=' + task_id;
return this.req.get(url);
}
cancelCopyMoveOperation(task_id) {
const url = this.server + '/api/v2.1/copy-move-task/';
let params = {
task_id: task_id
};
return this.req.delete(url, { data: params });
}
deleteMutipleDirents(repoID, parentDir, direntNames) {
const url = this.server + '/api/v2.1/repos/batch-delete-item/';
let operation = {
'repo_id': repoID,
'parent_dir': parentDir,
'dirents': direntNames
};
return this.req.delete(url, { data: operation }, { headers: { 'Content-Type': 'application/json' } });
}
zipDownload(repoID, parent_dir, dirents) { // can download one dir
const url = this.server + '/api/v2.1/repos/' + repoID + '/zip-task/';
const form = new FormData();
form.append('parent_dir', parent_dir);
if (Array.isArray(dirents)) {
dirents.forEach(item => {
form.append('dirents', item);
});
} else {
form.append('dirents', dirents);
}
return this._sendPostRequest(url, form);
}
queryZipProgress(zip_token) {
const url = this.server + '/api/v2.1/query-zip-progress/?token=' + zip_token;
return this.req.get(url);
}
cancelZipTask(zip_token) {
const url = this.server + '/api/v2.1/cancel-zip-task/';
const form = new FormData();
form.append('token', zip_token);
return this.req.post(url, form);
}
// ---- File Operation
getFileInfo(repoID, filePath) {
const path = encodeURIComponent(filePath);
const url = this.server + '/api2/repos/' + repoID + '/file/detail/?p=' + path;
return this.req.get(url);
}
getFileHistory(repoID, folderPath) {
const url = this.server + '/api2/repos/' + repoID + '/file/history/?p=' + encodeURIComponent(folderPath);
return this.req.get(url);
}
getFileDownloadLink(repoID, filePath) {
// reuse default to 1 to eliminate cross domain request problem
// In browser, the browser will send an option request to server first, the access Token
// will become invalid if reuse=0
const path = encodeURIComponent(filePath);
const url = this.server + '/api2/repos/' + repoID + '/file/?p=' + path + '&reuse=1';
return this.req.get(url);
}
getFileContent(downloadLink) {
return axios.create().get(downloadLink);
}
createFile(repoID, filePath, isDraft) {
const path = encodeURIComponent(filePath);
const url = this.server + '/api/v2.1/repos/' + repoID + '/file/?p=' + path;
let form = new FormData();
form.append('operation', 'create');
form.append('is_draft', isDraft);
return this._sendPostRequest(url, form);
}
renameFile(repoID, filePath, newfileName) {
const path = encodeURIComponent(filePath);
const url = this.server + '/api/v2.1/repos/' + repoID + '/file/?p=' + path;
let form = new FormData();
form.append('operation', 'rename');
form.append('newname', newfileName);
return this._sendPostRequest(url, form);
}
convertFile(repoID, filePath, dstType) {
const path = encodeURIComponent(filePath);
const url = this.server + '/api/v2.1/repos/' + repoID + '/file/?p=' + path;
let form = new FormData();
form.append('operation', 'convert');
form.append('dst_type', dstType);
return this._sendPostRequest(url, form);
}
lockfile(repoID, filePath, expire) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/file/?p=' + encodeURIComponent(filePath);
let form = new FormData();
form.append('operation', 'lock');
if (expire != undefined) {
form.append('expire', expire);
}
return this.req.put(url, form);
}
unlockfile(repoID, filePath) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/file/?p=' + encodeURIComponent(filePath);
let form = new FormData();
form.append('operation', 'unlock');
return this.req.put(url, form);
}
// move need to add
// copy need to add
revertFile(repoID, path, commitID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/file/?p=' + encodeURIComponent(path);
let form = new FormData();
form.append('operation', 'revert');
form.append('commit_id', commitID);
return this._sendPostRequest(url, form);
}
revertFolder(repoID, path, commitID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/dir/?p=' + encodeURIComponent(path);
let form = new FormData();
form.append('operation', 'revert');
form.append('commit_id', commitID);
return this._sendPostRequest(url, form);
}
revertRepo(repoID, commitID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/commits/' + commitID + '/revert/';
return this.req.post(url);
}
deleteFile(repoID, filePath) {
const path = encodeURIComponent(filePath);
const url = this.server + '/api/v2.1/repos/' + repoID + '/file/?p=' + path;
return this.req.delete(url);
}
getFileServerUploadLink(repoID, folderPath) {
const path = encodeURIComponent(folderPath);
const url = this.server + '/api2/repos/' + repoID + '/upload-link/?p=' + path + '&from=web';
return this.req.get(url);
}
// for shared folder link with 'can_upload' permission
sharedLinkGetFileUploadUrl(token, path) {
const url = this.server + '/api/v2.1/share-links/' + token + '/upload/?path=' + encodeURIComponent(path);
return this.req.get(url);
}
getFileUploadedBytes(repoID, filePath, fileName) {
let url = this.server + '/api/v2.1/repos/' + repoID + '/file-uploaded-bytes/';
let params = {
parent_dir: filePath,
file_name: fileName,
};
return this.req.get(url, { params: params });
}
sharedUploadLinkGetFileUploadUrl(token) {
const url = this.server + '/api/v2.1/upload-links/' + token + '/upload/';
return this.req.get(url);
}
shareLinksUploadDone(token, filePath, isDir) {
var url = this.server + '/api/v2.1/share-links/' + token + '/upload/done/';
var form = new FormData();
form.append('file_path', filePath);
if (isDir != undefined) {
form.append('is_dir', isDir);
}
return this._sendPostRequest(url, form);
}
uploadImage(uploadLink, formData, onUploadProgress = null) {
return (
axios.create()({
method: 'post',
data: formData,
url: uploadLink,
onUploadProgress: onUploadProgress
})
);
}
getUpdateLink(repoID, folderPath) {
const url = this.server + '/api2/repos/' + repoID + '/update-link/?p=' + encodeURIComponent(folderPath);
return this.req.get(url);
}
updateFile(uploadLink, filePath, fileName, data) {
let formData = new FormData();
formData.append('target_file', filePath);
formData.append('filename', fileName);
let blob = new Blob([data], { type: 'text/plain' });
formData.append('file', blob);
return (
axios.create()({
method: 'post',
url: uploadLink,
data: formData,
})
);
}
listFileHistoryRecords(repoID, path, page, per_page) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/file/new_history/';
const params = {
path: path,
page: page,
per_page: per_page,
};
return this.req.get(url, { params: params });
}
listOldFileHistoryRecords(repoID, path, commitID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/file/history/';
const params = {
path: path,
commit_id: commitID,
};
return this.req.get(url, { params: params });
}
getFileRevision(repoID, commitID, filePath) {
let url = this.server + '/api2/' + 'repos/' + repoID + '/file' + '/revision/?p=' + encodeURIComponent(filePath) + '&commit_id=' + commitID;
return this.req.get(url);
}
// file extended properties
getFileExtendedProperties(repoID, path) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/extended-properties/?path=' + path;
return this.req.get(url);
}
newFileExtendedProperties(repoID, path, data) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/extended-properties/';
var form = new FormData();
form.append('path', path);
form.append('props_data', JSON.stringify(data));
return this._sendPostRequest(url, form);
}
updateFileExtendedProperties(repoID, path, data) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/extended-properties/';
var form = new FormData();
form.append('path', path);
form.append('props_data', JSON.stringify(data));
return this.req.put(url, form);
}
deleteFileExtendedProperties(repoID, path) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/extended-properties/?path=' + path;
return this.req.delete(url);
}
applyFolderExtendedProperties(repoID, path) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/apply-folder-extended-properties/';
var form = new FormData();
form.append('path', path);
return this.req.post(url, form);
}
listComments(repoID, fileUuid) {
let url = `${this.server}/api/v2.1/repos/${repoID}/file/${fileUuid}/comments/`;
return this.req.get(url);
}
postComment(repoID, fileUuid, comment) {
let url = `${this.server}/api/v2.1/repos/${repoID}/file/${fileUuid}/comments/`;
let form = new FormData();
form.append('comment', comment);
return this._sendPostRequest(url, form);
}
deleteComment(repoID, fileUuid, commentID) {
let url = `${this.server}/api/v2.1/repos/${repoID}/file/${fileUuid}/comments/${commentID}/`;
return this.req.delete(url);
}
updateComment(repoID, fileUuid, commentID, resolved, detail, comment) {
let url = `${this.server}/api/v2.1/repos/${repoID}/file/${fileUuid}/comments/${commentID}/`;
let params = {};
if (resolved) {
params.resolved = resolved;
}
if (detail) {
params.detail = detail;
}
if (comment) {
params.comment = comment;
}
return this.req.put(url, params);
}
listReplies = (repoID, fileUuid, commentID) => {
let url = `${this.server}/api/v2.1/repos/${repoID}/file/${fileUuid}/comments/${commentID}/replies/`;
return this.req.get(url);
};
insertReply = (repoID, fileUuid, commentID, replyData) => {
let url = `${this.server}/api/v2.1/repos/${repoID}/file/${fileUuid}/comments/${commentID}/replies/`;
let form = new FormData();
for (let key in replyData) {
form.append(key, replyData[key]);
}
return this._sendPostRequest(url, form);
};
deleteReply = (repoID, fileUuid, commentID, replyId) => {
let url = `${this.server}/api/v2.1/repos/${repoID}/file/${fileUuid}/comments/${commentID}/replies/${replyId}/`;
return this.req.delete(url);
};
updateReply = (repoID, fileUuid, commentID, replyId, replyData) => {
let url = `${this.server}/api/v2.1/repos/${repoID}/file/${fileUuid}/comments/${commentID}/replies/${replyId}/`;
return this.req.put(url, replyData);
};
// starred
listStarredItems() {
const url = this.server + '/api/v2.1/starred-items/';
return this.req.get(url);
}
starItem(repoID, path) {
const url = this.server + '/api/v2.1/starred-items/';
let form = new FormData();
form.append('repo_id', repoID);
form.append('path', path);
return this._sendPostRequest(url, form);
}
unstarItem(repoID, path) {
const url = this.server + '/api/v2.1/starred-items/?repo_id=' + repoID + '&path=' + encodeURIComponent(path);
return this.req.delete(url);
}
monitorRepo(repoID) {
const url = this.server + '/api/v2.1/monitored-repos/';
let form = new FormData();
form.append('repo_id', repoID);
return this._sendPostRequest(url, form);
}
unMonitorRepo(repoID) {
const url = this.server + '/api/v2.1/monitored-repos/' + repoID + '/';
return this.req.delete(url);
}
// ---- tags module api
// repo tags
listRepoTags(repoID) {
var url = this.server + '/api/v2.1/repos/' + repoID + '/repo-tags/';
return this.req.get(url);
}
createRepoTag(repoID, name, color) {
var url = this.server + '/api/v2.1/repos/' + repoID + '/repo-tags/';
var form = new FormData();
form.append('name', name);
form.append('color', color);
return this._sendPostRequest(url, form);
}
listTaggedFiles(repoID, repoTagId) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/tagged-files/' + repoTagId + '/';
return this.req.get(url);
}
// file tag api
listFileTags(repoID, filePath) {
var p = encodeURIComponent(filePath);
var url = this.server + '/api/v2.1/repos/' + repoID + '/file-tags/?file_path=' + p;
return this.req.get(url);
}
addFileTag(repoID, filePath, repoTagId) {
var form = new FormData();
form.append('file_path', filePath);
form.append('repo_tag_id', repoTagId);
var url = this.server + '/api/v2.1/repos/' + repoID + '/file-tags/';
return this._sendPostRequest(url, form);
}
deleteFileTag(repoID, fileTagId) {
var url = this.server + '/api/v2.1/repos/' + repoID + '/file-tags/' + fileTagId + '/';
return this.req.delete(url);
}
saveSharedFile(repoID, dstPath, sharedToken, filePath) {
const url = this.server + '/api/v2.1/share-links/' + sharedToken + '/save-file-to-repo/';
let form = new FormData();
form.append('dst_repo_id', repoID);
form.append('dst_parent_dir', dstPath);
// for file in shared dir
if (filePath) {
form.append('path', filePath);
}
return this._sendPostRequest(url, form);
}
saveSharedDir(repoID, dstPath, sharedToken, parentDir, items) {
const url = this.server + '/api/v2.1/share-links/' + sharedToken + '/save-items-to-repo/';
let form = new FormData();
form.append('src_parent_dir', parentDir);
items.forEach(item => {
form.append('src_dirents', item);
});
form.append('dst_repo_id', repoID);
form.append('dst_parent_dir', dstPath);
return this._sendPostRequest(url, form);
}
addAbuseReport(sharedToken, abuseType, description, reporter, filePath) {
const url = this.server + '/api/v2.1/abuse-reports/';
let form = new FormData();
form.append('share_link_token', sharedToken);
form.append('abuse_type', abuseType);
form.append('description', description);
form.append('reporter', reporter);
form.append('file_path', filePath);
return this._sendPostRequest(url, form);
}
getInternalLink(repoID, filePath, direntType) {
let isDir = direntType === 'dir' ? true : false;
const path = encodeURIComponent(filePath);
const url = this.server + '/api/v2.1/smart-link/?repo_id=' + repoID + '&path=' + path + '&is_dir=' + isDir;
return this.req.get(url);
}
getWikiFileContent(slug, filePath) {
const path = encodeURIComponent(filePath);
const time = new Date().getTime();
const url = this.server + '/api/v2.1/wikis/' + encodeURIComponent(slug) + '/content/' + '?p=' + path + '&_=' + time;
return this.req.get(url);
}
// ---- Avatar API
getUserAvatar(user, size) {
const url = this.server + '/api2/avatars/user/' + encodeURIComponent(user) + '/resized/' + size + '/';
return this.req.get(url);
}
// ---- Notification API
listAllNotifications(page, perPage) {
const url = this.server + '/api/v2.1/all-notifications/';
let params = {
page: page,
per_page: perPage
};
return this.req.get(url, { params: params });
}
updateAllNotifications() {
const url = this.server + '/api/v2.1/all-notifications/';
return this.req.put(url);
}
listNotifications(page, perPage) {
const url = this.server + '/api/v2.1/notifications/';
let params = {
page: page,
per_page: perPage
};
return this.req.get(url, { params: params });
}
listSdocNotifications(page, perPage) {
const url = this.server + '/api/v2.1/sdoc-notifications/';
let params = {
page: page,
per_page: perPage
};
return this.req.get(url, { params: params });
}
updateNotifications() {
const url = this.server + '/api/v2.1/notifications/';
return this.req.put(url);
}
updateSdocNotifications() {
const url = this.server + '/api/v2.1/sdoc-notifications/';
return this.req.put(url);
}
deleteNotifications() {
const url = this.server + '/api/v2.1/notifications/';
return this.req.delete(url);
}
deleteSdocNotifications() {
const url = this.server + '/api/v2.1/sdoc-notifications/';
return this.req.delete(url);
}
getUnseenNotificationCount() {
const url = this.server + '/api/v2.1/notifications/';
return this.req.get(url);
}
markNoticeAsRead(noticeId) {
const url = this.server + '/api/v2.1/notification/';
let from = new FormData();
from.append('notice_id', noticeId);
return this.req.put(url, from);
}
markSdocNoticeAsRead(noticeId) {
const url = this.server + '/api/v2.1/sdoc-notification/';
let from = new FormData();
from.append('notice_id', noticeId);
return this.req.put(url, from);
}
// ---- Linked Devices API
listLinkedDevices() {
const url = this.server + '/api2/devices/';
return this.req.get(url);
}
unlinkDevice(platform, deviceID, wipeDevice) {
const url = this.server + '/api2/devices/';
let param = {
platform: platform,
device_id: deviceID,
wipe_device: wipeDevice ? 'true' : 'false'
};
return this.req.delete(url, { data: param });
}
// ---- Activities API
listActivities(pageNum, operationUser) {
let url = this.server + '/api/v2.1/activities/?page=' + pageNum;
if (operationUser) {
url += '&op_user=' + encodeURIComponent(operationUser);
}
return this.req.get(url);
}
// ---- Thumbnail API
createThumbnail(repo_id, path, thumbnail_size) {
const url = this.server + '/thumbnail/' + repo_id + '/create/?path=' +
encodeURIComponent(path) + '&size=' + thumbnail_size;
return this.req.get(url, { headers: { 'X-Requested-With': 'XMLHttpRequest' } });
}
// ---- Users API
searchUsers(searchParam) {
const url = this.server + '/api2/search-user/?q=' + encodeURIComponent(searchParam);
return this.req.get(url);
}
// ---- wiki module API
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(repoID) {
const url = this.server + '/api/v2.1/wikis/';
let form = new FormData();
form.append('repo_id', repoID);
return this._sendPostRequest(url, form);
}
renameWiki(slug, name) {
const url = this.server + '/api/v2.1/wikis/' + slug + '/';
let form = new FormData();
form.append('wiki_name', name);
return this._sendPostRequest(url, form);
}
updateWikiPermission(wikiSlug, permission) {
const url = this.server + '/api/v2.1/wikis/' + wikiSlug + '/';
let params = {
permission: permission
};
return this.req.put(url, params);
}
deleteWiki(slug) {
const url = this.server + '/api/v2.1/wikis/' + slug + '/';
return this.req.delete(url);
}
// ----MetaData API
fileMetaData(repoID, filePath) {
const url = this.server + '/api2/repos/' + repoID + '/file/metadata/?p=' + encodeURIComponent(filePath);
return this.req.get(url);
}
dirMetaData(repoID, dirPath) {
const url = this.server + '/api2/repos/' + repoID + '/dir/metadata/?p=' + encodeURIComponent(dirPath);
return this.req.get(url);
}
markdownLint(slateValue) {
const url = this.server + '/api/v2.1/markdown-lint/';
let form = new FormData();
form.append('slate', slateValue);
return this._sendPostRequest(url, form);
}
queryOfficeFileConvertStatus(repoID, commitID, path, fileType, shareToken) {
const url = this.server + '/office-convert/status/';
const params = {
repo_id: repoID,
commit_id: commitID,
path: path,
doctype: fileType // 'document' or 'spreadsheet'
};
// for view of share link
if (shareToken) {
params['token'] = shareToken;
}
return this.req.get(url, {
headers: { 'X-Requested-With': 'XMLHttpRequest' },
params: params
});
}
listSharedDir(token, path, thumbnailSize) {
const url = this.server + '/api/v2.1/share-links/' + token + '/dirents/';
const params = {
thumbnail_size: thumbnailSize,
path: path
};
return this.req.get(url, {
params: params
});
}
getShareLinkZipTask(token, path) {
const url = this.server + '/api/v2.1/share-link-zip-task/';
const params = {
share_link_token: token,
path: path
};
return this.req.get(url, {
params: params
});
}
getShareLinkDirentsZipTask(token, path, dirents) {
const url = this.server + '/api/v2.1/share-link-zip-task/';
const params = {
token: token,
parent_dir: path,
dirents: dirents
};
return this.req.post(url, params);
}
getShareLinkThumbnail(token, filePath, thumbnailSize) {
const url = this.server + '/thumbnail/' + token + '/create/';
const params = {
path: filePath,
size: thumbnailSize
};
return this.req.get(url, {
params: params
});
}
// get all existing repo snapshot labels of the user
getAllRepoSnapshotLabels() {
const url = this.server + '/api/v2.1/revision-tags/tag-names/';
return this.req.get(url);
}
addNewRepoLabels(repoID, labels) {
const url = this.server + '/api/v2.1/revision-tags/tagged-items/';
const data = {
'repo_id': repoID,
'tag_names': labels
};
return this.req.post(url, data);
}
updateRepoCommitLabels(repoID, commitID, labels) {
const url = this.server + '/api/v2.1/revision-tags/tagged-items/';
const data = {
'repo_id': repoID,
'commit_id': commitID,
'tag_names': labels
};
return this.req.put(url, data);
}
invitePeople(emails) {
const url = this.server + '/api/v2.1/invitations/batch/';
let form = new FormData();
form.append('type', 'guest');
for (let i = 0; i < emails.length; i++) {
form.append('accepter', emails[i]);
}
return this._sendPostRequest(url, form);
}
listInvitations() {
const url = this.server + '/api/v2.1/invitations/';
return this.req.get(url);
}
deleteInvitation(token) {
const url = this.server + '/api/v2.1/invitations/' + token + '/';
return this.req.delete(url);
}
revokeInvitation(token) {
const url = this.server + '/api/v2.1/invitations/' + token + '/revoke/';
return this.req.post(url);
}
addRepoShareInvitations(repoID, path, emails, permission) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/shared/invitations/batch/';
const data = {
type: 'guest',
accepters: emails,
path: path,
permission: permission,
};
return this.req.post(url, data);
}
listRepoShareInvitations(repoID, path) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/shared/invitations/?path=' + path;
return this.req.get(url);
}
updateRepoShareInvitation(repoID, path, token, permission) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/shared/invitation/';
let data = { token: token, path: path, permission: permission };
return this.req.put(url, data);
}
deleteRepoShareInvitation(repoID, path, token) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/shared/invitation/';
let params = { token: token, path: path };
return this.req.delete(url, { data: params });
}
updateUserAvatar(avatarFile) {
const url = this.server + '/api/v2.1/user-avatar/';
let form = new FormData();
form.append('avatar', avatarFile);
return this._sendPostRequest(url, form);
}
getUserInfo() {
const url = this.server + '/api/v2.1/user/';
return this.req.get(url);
}
updateUserInfo({ name, telephone, contact_email, list_in_address_book }) {
const url = this.server + '/api/v2.1/user/';
let data = {};
if (name != undefined) {
data.name = name;
}
if (telephone != undefined) {
data.telephone = telephone;
}
if (contact_email != undefined) {
data.contact_email = contact_email;
}
if (list_in_address_book != undefined) {
data.list_in_address_book = list_in_address_book;
}
return this.req.put(url, data);
}
updateEmailNotificationInterval(fileUpdatesEmailInterval, collaborateEmailInterval) {
const url = this.server + '/api2/account/info/';
const data = {
'file_updates_email_interval': fileUpdatesEmailInterval,
'collaborate_email_interval': collaborateEmailInterval,
};
return this.req.put(url, data);
}
updateWebdavSecret(password) {
const url = this.server + '/api/v2.1/webdav-secret/';
const data = {
'secret': password
};
return this.req.put(url, data);
}
listUserFolderPerm(repoID, folderPath) {
let url = this.server + '/api2/repos/' + repoID + '/user-folder-perm/';
if (folderPath) {
url = url + '?folder_path=' + encodeURIComponent(folderPath);
}
return this.req.get(url);
}
addUserFolderPerm(repoID, permission, folderPath, userEmail) {
const url = this.server + '/api2/repos/' + repoID + '/user-folder-perm/';
let form = new FormData();
form.append('permission', permission);
form.append('folder_path', folderPath);
if (Array.isArray(userEmail)) {
userEmail.forEach(item => {
form.append('user_email', item);
});
} else {
form.append('user_email', userEmail);
}
return this._sendPostRequest(url, form);
}
updateUserFolderPerm(repoID, permission, folderPath, userEmail) {
const url = this.server + '/api2/repos/' + repoID + '/user-folder-perm/';
let form = new FormData();
form.append('permission', permission);
form.append('folder_path', folderPath);
form.append('user_email', userEmail);
return this.req.put(url, form);
}
deleteUserFolderPerm(repoID, permission, folderPath, userEmail) {
const url = this.server + '/api2/repos/' + repoID + '/user-folder-perm/';
let param = {
permission: permission,
folder_path: folderPath,
user_email: userEmail,
};
return this.req.delete(url, { data: param });
}
listGroupFolderPerm(repoID, folderPath) {
let url = this.server + '/api2/repos/' + repoID + '/group-folder-perm/';
if (folderPath) {
url = url + '?folder_path=' + encodeURIComponent(folderPath);
}
return this.req.get(url);
}
addGroupFolderPerm(repoID, permission, folderPath, groupIDs) {
const url = this.server + '/api2/repos/' + repoID + '/group-folder-perm/';
let form = new FormData();
form.append('permission', permission);
form.append('folder_path', folderPath);
groupIDs.forEach(item => {
form.append('group_id', item);
});
return this._sendPostRequest(url, form);
}
updateGroupFolderPerm(repoID, permission, folderPath, groupID) {
const url = this.server + '/api2/repos/' + repoID + '/group-folder-perm/';
let form = new FormData();
form.append('permission', permission);
form.append('folder_path', folderPath);
form.append('group_id', groupID);
return this.req.put(url, form);
}
deleteGroupFolderPerm(repoID, permission, folderPath, groupID) {
const url = this.server + '/api2/repos/' + repoID + '/group-folder-perm/';
let param = {
permission: permission,
folder_path: folderPath,
group_id: groupID,
};
return this.req.delete(url, { data: param });
}
listDepartmentRepoUserFolderPerm(repoID, folderPath) {
let url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/user-folder-permission/';
if (folderPath) {
url = url + '?folder_path=' + encodeURIComponent(folderPath);
}
return this.req.get(url);
}
addDepartmentRepoUserFolderPerm(repoID, permission, folderPath, userEmail) {
const url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/user-folder-permission/';
let form = new FormData();
form.append('permission', permission);
form.append('folder_path', folderPath);
if (Array.isArray(userEmail)) {
userEmail.forEach(item => {
form.append('user_email', item);
});
} else {
form.append('user_email', userEmail);
}
return this._sendPostRequest(url, form);
}
updateDepartmentRepoUserFolderPerm(repoID, permission, folderPath, userEmail) {
const url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/user-folder-permission/';
let form = new FormData();
form.append('permission', permission);
form.append('folder_path', folderPath);
form.append('user_email', userEmail);
return this.req.put(url, form);
}
deleteDepartmentRepoUserFolderPerm(repoID, permission, folderPath, userEmail) {
const url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/user-folder-permission/';
let param = {
permission: permission,
folder_path: folderPath,
user_email: userEmail,
};
return this.req.delete(url, { data: param });
}
listDepartmentRepoGroupFolderPerm(repoID, folderPath) {
let url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/group-folder-permission/';
if (folderPath) {
url = url + '?folder_path=' + encodeURIComponent(folderPath);
}
return this.req.get(url);
}
addDepartmentRepoGroupFolderPerm(repoID, permission, folderPath, groupIDs) {
const url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/group-folder-permission/';
let form = new FormData();
form.append('permission', permission);
form.append('folder_path', folderPath);
groupIDs.forEach(item => {
form.append('group_id', item);
});
return this._sendPostRequest(url, form);
}
updateDepartmentRepoGroupFolderPerm(repoID, permission, folderPath, groupID) {
const url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/group-folder-permission/';
let form = new FormData();
form.append('permission', permission);
form.append('folder_path', folderPath);
form.append('group_id', groupID);
return this.req.put(url, form);
}
deleteDepartmentRepoGroupFolderPerm(repoID, permission, folderPath, groupID) {
const url = this.server + '/api/v2.1/group-owned-libraries/' + repoID + '/group-folder-permission/';
let param = {
permission: permission,
folder_path: folderPath,
group_id: groupID,
};
return this.req.delete(url, { data: param });
}
getRepoHistory(repoID, page, perPage) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/history/';
const params = {
page: page || 1,
per_page: perPage || 100
};
return this.req.get(url, { params: params });
}
getCommitDetails(repoID, commitID) {
const url = this.server + '/ajax/repo/' + repoID + '/history/changes/';
const params = {
commit_id: commitID
};
return this.req.get(url, {
headers: { 'X-Requested-With': 'XMLHttpRequest' },
params: params
});
}
getRepoFolderTrash(repoID, path, scanStat) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/trash/';
let params = {
path: path
};
if (scanStat) {
params.scan_stat = scanStat;
}
return this.req.post(url, params);
}
restoreDirents(repoID, commentID, paths) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/trash/revert-dirents/';
let formData = new FormData();
paths.forEach(path => {
formData.append('path', path);
});
formData.append('commit_id', commentID);
return this._sendPostRequest(url, formData);
}
deleteRepoTrash(repoID, days) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/trash/';
const params = {
keep_days: days
};
return this.req.delete(url, { data: params });
}
restoreFolder(repoID, commitID, path) {
const url = this.server + '/api2/repos/' + repoID + '/dir/revert/';
const data = {
'commit_id': commitID,
'p': path
};
return this.req.put(url, data);
}
restoreFile(repoID, commitID, path) {
const url = this.server + '/api2/repos/' + repoID + '/file/revert/';
const data = {
'commit_id': commitID,
'p': path
};
return this.req.put(url, data);
}
listCommitDir(repoID, commitID, path) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/commits/' + commitID + '/dir/';
const params = {
path: path
};
return this.req.get(url, { params: params });
}
listRepoRelatedUsers(repoID) {
let url = this.server + '/api/v2.1/repos/' + repoID + '/related-users/';
return this.req.get(url);
}
listFileParticipants(repoID, filePath) {
const path = encodeURIComponent(filePath);
let url = this.server + '/api/v2.1/repos/' + repoID + '/file/participants/?path=' + path;
return this.req.get(url);
}
addFileParticipants(repoID, filePath, emails) {
let url = this.server + '/api/v2.1/repos/' + repoID + '/file/participants/';
let params = {
path: filePath,
emails: emails
};
return this.req.post(url, params);
}
deleteFileParticipant(repoID, filePath, email) {
let url = this.server + '/api/v2.1/repos/' + repoID + '/file/participant/';
let params = {
path: filePath,
email: email
};
return this.req.delete(url, { data: params });
}
listOCMSharesPrepare(repoId) {
let url = this.server + '/api/v2.1/ocm/shares-prepare/';
if (repoId) {
url += '?repo_id=' + repoId;
}
return this.req.get(url);
}
addOCMSharePrepare(toUser, toServerURL, repoId, path, permission) {
let url = this.server + '/api/v2.1/ocm/shares-prepare/';
let params = {
'to_user': toUser,
'to_server_url': toServerURL,
'repo_id': repoId,
'path': path,
'permission': permission,
};
return this.req.post(url, params);
}
deleteOCMSharePrepare(id) {
let url = this.server + '/api/v2.1/ocm/shares-prepare/' + id + '/';
return this.req.delete(url);
}
listOCMSharesReceived() {
let url = this.server + '/api/v2.1/ocm/shares-received/';
return this.req.get(url);
}
deleteOCMShareReceived(id) {
let url = this.server + '/api/v2.1/ocm/shares-received/' + id + '/';
return this.req.delete(url);
}
listOCMRepoDir(providerID, repoID, path) {
let url = this.server + '/api/v2.1/ocm/providers/' + providerID + '/repos/' + repoID + '/dir/?path=' + encodeURIComponent(path);
return this.req.get(url);
}
getOCMRepoDownloadURL(providerID, repoID, path) {
let url = this.server + '/api/v2.1/ocm/providers/' + providerID + '/repos/' + repoID + '/download-link/?path=' + encodeURIComponent(path);
return this.req.get(url);
}
getOCMRepoUploadURL(providerID, repoID, path) {
let url = this.server + '/api/v2.1/ocm/providers/' + providerID + '/repos/' + repoID + '/upload-link/?path=' + encodeURIComponent(path);
return this.req.get(url);
}
getRepoOldFilesAutoDelDays(repoID) {
let url = this.server + '/api/v2.1/repos/' + repoID + '/auto-delete/';
return this.req.get(url);
}
setRepoOldFilesAutoDelDays(repoID, autoDelDays) {
let url = this.server + '/api/v2.1/repos/' + repoID + '/auto-delete/';
let formData = new FormData();
formData.append('auto_delete_days', autoDelDays);
return this.req.put(url, formData);
}
sdocCopyHistoryFile(repoID, path, objID, ctime) {
const url = this.server + '/api/v2.1/seadoc/copy-history-file/' + repoID + '/';
let form = new FormData();
form.append('obj_id', objID);
form.append('p', path);
form.append('ctime', ctime);
return this._sendPostRequest(url, form);
}
listSdocHistory(docUuid, page, perPage) {
const url = this.server + '/api/v2.1/seadoc/history/' + docUuid + '/';
const params = {
page: page,
per_page: perPage,
};
return this.req.get(url, { params: params });
}
listSdocDailyHistoryDetail(docUuid, opDate) {
const url = this.server + '/api/v2.1/seadoc/daily-history-detail/' + docUuid + '/';
const params = { op_date: opDate };
return this.req.get(url, { params: params });
}
renameSdocHistory(docUuid, objID, newName) {
const url = this.server + '/api/v2.1/seadoc/history/' + docUuid + '/';
const data = {
obj_id: objID,
new_name: newName,
};
return this.req.post(url, data);
}
sdocStartRevise(repoID, path) {
const url = this.server + '/api/v2.1/seadoc/revisions/';
let form = new FormData();
form.append('p', path);
form.append('repo_id', repoID);
return this._sendPostRequest(url, form);
}
sdocPublishRevision(docUuid) {
const url = this.server + '/api/v2.1/seadoc/publish-revision/' + docUuid + '/';
return this.req.post(url);
}
onlyofficeConvert(repoID, filePath) {
const url = this.server + '/onlyoffice-api/convert/';
let formData = new FormData();
formData.append('repo_id', repoID);
formData.append('file_path', filePath);
return this._sendPostRequest(url, formData);
}
importSdoc(file, repoID, parentDir) {
const url = this.server + '/api/v2.1/seadoc/import/' + repoID + '/';
let formData = new FormData();
formData.append('file', file);
formData.append('parent_dir', parentDir);
return this._sendPostRequest(url, formData);
}
}
let seafileAPI = new SeafileAPI();
let xcsrfHeaders = cookie.load('sfcsrftoken');
seafileAPI.initForSeahubUsage({ siteRoot, xcsrfHeaders });
export { seafileAPI };