mirror of
https://github.com/haiwen/seahub.git
synced 2025-04-27 11:01:14 +00:00
* 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>
2232 lines
69 KiB
JavaScript
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 + '¬_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 };
|