1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-20 10:58:33 +00:00
Files
seahub/frontend/src/utils/share-link-api.js
Ranjiwei add4689b02 add-share-link-authentication (#6201)
* add-share-link-authentication

* [share link - link creation] 'set scope': redesigned it

* update

* Update share_link_auth.py

* Update share_link_auth.py

* Update share_link_auth.py

* Update share_link_auth.py

* Update share_link_auth.py

* Update share_link_auth.py

* [share link - link details] redesigned the panel

* [share dialog - share link] 'authenticated users/emails' panels: redesigned them

* [share dialog - share link'] UI details, UX, and code improvements for 'link detais, authenticated users/emails' panels

* [share dialog - share link] updated the 'submit' handler for the 'authenticated emails/users' panels; fixup for 'set scope' in the 'link creation' panel'

* [share dialog - share link] deleted 'share-link-api.js', moved api modification to seafile-js; fixed 'change scope'  & etc. in 'link details'

* [share dialog - share link] link authenticated users: update 'submit' handler according to the python API update

* [share dialog - share link] added 'share-link-api.js' back & used it

* [share dialog - share link] handled eslint warnings and etc.

---------

Co-authored-by: llj <lingjun.li1@gmail.com>
2024-07-19 18:12:35 +08:00

131 lines
3.7 KiB
JavaScript

import cookie from 'react-cookies';
import { siteRoot } from './constants';
import axios from 'axios';
class ShareLinkAPI {
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) === '/') {
let 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);
}
}
listShareLinkAuthUsers(link_token, path) {
const url = this.server + '/api/v2.1/share-links/' + link_token + '/user-auth/?path=' + encodeURIComponent(path);
return this.req.get(url);
}
addShareLinkAuthUsers(link_token, emails, path) {
const url = this.server + '/api/v2.1/share-links/' + link_token + '/user-auth/?path=' + encodeURIComponent(path);
const data = {
emails: emails,
};
return this.req.post(url, data);
}
deleteShareLinkAuthUsers(link_token, emails, path) {
const url = this.server + '/api/v2.1/share-links/' + link_token + '/user-auth/?path=' + encodeURIComponent(path);
const params = {
emails: emails,
};
return this.req.delete(url, { data: params });
}
listShareLinkAuthEmails(link_token, path) {
const url = this.server + '/api/v2.1/share-links/' + link_token + '/email-auth/?path=' + encodeURIComponent(path);
return this.req.get(url);
}
addShareLinkAuthEmails(link_token, emails, path) {
const url = this.server + '/api/v2.1/share-links/' + link_token + '/email-auth/?path=' + encodeURIComponent(path);
const data = {
emails: emails,
};
return this.req.post(url, data);
}
deleteShareLinkAuthEmails(link_token, emails, path) {
const url = this.server + '/api/v2.1/share-links/' + link_token + '/email-auth/?path=' + encodeURIComponent(path);
const params = {
emails: emails,
};
return this.req.delete(url, { data: params });
}
updateShareLink(token, permissions, expirationTime = '', userScope = '') {
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);
}
if (userScope) {
form.append('user_scope', userScope);
}
return this.req.put(url, form);
}
createMultiShareLink(repoID, path, password, expirationTime, permissions, scope, users) {
const url = this.server + '/api/v2.1/multi-share-links/';
let form = {
'path': path,
'repo_id': repoID,
'user_scope': scope,
};
if (permissions) {
form['permissions'] = permissions;
}
if (password) {
form['password'] = password;
}
if (expirationTime) {
form['expiration_time'] = expirationTime;
}
if (users) {
form['emails'] = users;
}
return this._sendPostRequest(url, form);
}
}
let shareLinkAPI = new ShareLinkAPI();
let xcsrfHeaders = cookie.load('sfcsrftoken');
shareLinkAPI.initForSeahubUsage({ siteRoot, xcsrfHeaders });
export { shareLinkAPI };