1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-06 09:21:54 +00:00

Org admin api (#7030)

* [org admin] moved related APIs from seafile-js to org-admin-api.js; use 'orgAdminAPI' instead of 'seafileAPI' for the dialogs

* [org admin] use 'orgAdminAPI' instead of 'seafileAPI' for the pages
This commit is contained in:
llj
2024-11-12 12:14:01 +08:00
committed by GitHub
parent 91c50d6765
commit c26b593a55
49 changed files with 600 additions and 129 deletions

View File

@@ -5,7 +5,7 @@ import { gettext, orgID } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../toast'; import toaster from '../toast';
import UserSelect from '../user-select'; import UserSelect from '../user-select';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import OrgUserInfo from '../../models/org-user'; import OrgUserInfo from '../../models/org-user';
const propTypes = { const propTypes = {
@@ -34,7 +34,7 @@ class AddOrgAdminDialog extends React.Component {
addOrgAdmin = () => { addOrgAdmin = () => {
if (!this.state.selectedOption) return; if (!this.state.selectedOption) return;
const userEmail = this.state.selectedOption.email; const userEmail = this.state.selectedOption.email;
seafileAPI.orgAdminSetOrgAdmin(orgID, userEmail, true).then(res => { orgAdminAPI.orgAdminSetOrgAdmin(orgID, userEmail, true).then(res => {
let userInfo = new OrgUserInfo(res.data); let userInfo = new OrgUserInfo(res.data);
this.props.onAddedOrgAdmin(userInfo); this.props.onAddedOrgAdmin(userInfo);
}).catch(error => { }).catch(error => {

View File

@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, Form, FormGroup, Label } from 'reactstrap'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, Form, FormGroup, Label } from 'reactstrap';
import { gettext, orgID } from '../../utils/constants'; import { gettext, orgID } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
const propTypes = { const propTypes = {
groupID: PropTypes.string, groupID: PropTypes.string,
@@ -28,7 +28,7 @@ class AddDepartmentDialog extends React.Component {
if (this.props.parentGroupID) { if (this.props.parentGroupID) {
parentGroup = this.props.parentGroupID; parentGroup = this.props.parentGroupID;
} }
seafileAPI.orgAdminAddDepartGroup(orgID, parentGroup, this.state.departmentName.trim()).then((res) => { orgAdminAPI.orgAdminAddDepartGroup(orgID, parentGroup, this.state.departmentName.trim()).then((res) => {
this.props.toggle(); this.props.toggle();
this.props.onAddNewDepartment(res.data); this.props.onAddNewDepartment(res.data);
}).catch(error => { }).catch(error => {

View File

@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Alert } from 'reactstrap'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Alert } from 'reactstrap';
import { gettext, orgID } from '../../utils/constants'; import { gettext, orgID } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../toast'; import toaster from '../toast';
import UserSelect from '../user-select'; import UserSelect from '../user-select';
@@ -32,7 +32,7 @@ class AddMemberDialog extends React.Component {
const email = this.state.selectedOption[0].email; const email = this.state.selectedOption[0].email;
this.refs.orgSelect.clearSelect(); this.refs.orgSelect.clearSelect();
this.setState({ errMessage: [] }); this.setState({ errMessage: [] });
seafileAPI.orgAdminAddGroupMember(orgID, this.props.groupID, email).then((res) => { orgAdminAPI.orgAdminAddGroupMember(orgID, this.props.groupID, email).then((res) => {
this.setState({ selectedOption: null }); this.setState({ selectedOption: null });
if (res.data.failed.length > 0) { if (res.data.failed.length > 0) {
this.setState({ errMessage: res.data.failed[0].error_msg }); this.setState({ errMessage: res.data.failed[0].error_msg });

View File

@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, Form, FormGroup, Label, Alert } from 'reactstrap'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, Form, FormGroup, Label, Alert } from 'reactstrap';
import { gettext, orgID } from '../../utils/constants'; import { gettext, orgID } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
const propTypes = { const propTypes = {
@@ -24,7 +24,7 @@ class AddRepoDialog extends React.Component {
handleSubmit = () => { handleSubmit = () => {
let isValid = this.validateName(); let isValid = this.validateName();
if (isValid) { if (isValid) {
seafileAPI.orgAdminAddDepartmentRepo(orgID, this.props.groupID, this.state.repoName.trim()).then((res) => { orgAdminAPI.orgAdminAddDepartmentRepo(orgID, this.props.groupID, this.state.repoName.trim()).then((res) => {
this.props.toggle(); this.props.toggle();
this.props.onAddNewRepo(res.data); this.props.onAddNewRepo(res.data);
}).catch(error => { }).catch(error => {

View File

@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
import { gettext, orgID } from '../../utils/constants'; import { gettext, orgID } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../../components/toast'; import toaster from '../../components/toast';
@@ -22,7 +22,7 @@ class DeleteDepartDialog extends React.Component {
deleteDepart = () => { deleteDepart = () => {
const { groupID } = this.props; const { groupID } = this.props;
this.props.toggle(); this.props.toggle();
seafileAPI.orgAdminDeleteDepartGroup(orgID, groupID).then((res) => { orgAdminAPI.orgAdminDeleteDepartGroup(orgID, groupID).then((res) => {
this.props.onDeleteDepartment(groupID); this.props.onDeleteDepartment(groupID);
}).catch(error => { }).catch(error => {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);

View File

@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
import { gettext, orgID } from '../../utils/constants'; import { gettext, orgID } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../toast'; import toaster from '../toast';
@@ -21,7 +21,7 @@ class DeleteMemberDialog extends React.Component {
deleteMember = () => { deleteMember = () => {
const userEmail = this.props.member.email; const userEmail = this.props.member.email;
seafileAPI.orgAdminDeleteGroupMember(orgID, this.props.groupID, userEmail).then((res) => { orgAdminAPI.orgAdminDeleteGroupMember(orgID, this.props.groupID, userEmail).then((res) => {
if (res.data.success) { if (res.data.success) {
this.props.onMemberChanged(); this.props.onMemberChanged();
this.props.toggle(); this.props.toggle();

View File

@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
import { gettext, orgID } from '../../utils/constants'; import { gettext, orgID } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../toast'; import toaster from '../toast';
@@ -14,7 +14,7 @@ class DeleteRepoDialog extends React.Component {
deleteRepo = () => { deleteRepo = () => {
const { repo } = this.props; const { repo } = this.props;
seafileAPI.orgAdminDeleteDepartmentRepo(orgID, this.props.groupID, this.props.repo.repo_id).then((res) => { orgAdminAPI.orgAdminDeleteDepartmentRepo(orgID, this.props.groupID, this.props.repo.repo_id).then((res) => {
if (res.data.success) { if (res.data.success) {
this.props.onDeleteRepo(repo.repo_id); this.props.onDeleteRepo(repo.repo_id);
this.props.toggle(); this.props.toggle();

View File

@@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Modal, ModalHeader, ModalBody } from 'reactstrap'; import { Modal, ModalHeader, ModalBody } from 'reactstrap';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { gettext } from '../../utils/constants'; import { gettext } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../toast'; import toaster from '../toast';
@@ -28,7 +28,7 @@ class FileUpdateDetailDialog extends React.Component {
} }
componentDidMount() { componentDidMount() {
seafileAPI.orgAdminGetFileUpdateDetail(this.props.repoID, this.props.commitID).then(res => { orgAdminAPI.orgAdminGetFileUpdateDetail(this.props.repoID, this.props.commitID).then(res => {
this.setState({ this.setState({
time: res.data.date_time, time: res.data.date_time,
renamed: this.state.renamed.concat(res.data.renamed), renamed: this.state.renamed.concat(res.data.renamed),

View File

@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, Form, FormGroup, Label } from 'reactstrap'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, Form, FormGroup, Label } from 'reactstrap';
import { gettext } from '../../utils/constants'; import { gettext } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../toast'; import toaster from '../toast';
@@ -35,7 +35,7 @@ class RenameDepartmentDialog extends React.Component {
let isValid = this.validateName(); let isValid = this.validateName();
const { orgID, groupID } = this.props; const { orgID, groupID } = this.props;
if (isValid) { if (isValid) {
seafileAPI.orgAdminUpdateDepartGroup(orgID, groupID, this.state.departmentName.trim()).then((res) => { orgAdminAPI.orgAdminUpdateDepartGroup(orgID, groupID, this.state.departmentName.trim()).then((res) => {
this.props.toggle(); this.props.toggle();
this.props.onDepartmentNameChanged(res.data); this.props.onDepartmentNameChanged(res.data);
toaster.success(gettext('Name updated')); toaster.success(gettext('Name updated'));

View File

@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, InputGroupAddon, InputGroup } from 'reactstrap'; import { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, InputGroupAddon, InputGroup } from 'reactstrap';
import { gettext, orgID } from '../../utils/constants'; import { gettext, orgID } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../toast'; import toaster from '../toast';
@@ -28,7 +28,7 @@ class SetGroupQuotaDialog extends React.Component {
if ((quota.length && myReg.test(quota)) || quota == -2) { if ((quota.length && myReg.test(quota)) || quota == -2) {
this.setState({ errMessage: '' }); this.setState({ errMessage: '' });
let newQuota = this.state.quota == -2 ? this.state.quota : this.state.quota * 1000000; let newQuota = this.state.quota == -2 ? this.state.quota : this.state.quota * 1000000;
seafileAPI.orgAdminSetGroupQuota(orgID, this.props.groupID, newQuota).then((res) => { orgAdminAPI.orgAdminSetGroupQuota(orgID, this.props.groupID, newQuota).then((res) => {
this.props.toggle(); this.props.toggle();
this.props.onSetQuota(res.data); this.props.onSetQuota(res.data);
}).catch(error => { }).catch(error => {

View File

@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
import { gettext } from '../../utils/constants'; import { gettext } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
const propTypes = { const propTypes = {
@@ -37,7 +37,7 @@ class SetOrgUserContactEmail extends React.Component {
submitBtnDisabled: true submitBtnDisabled: true
}); });
seafileAPI.orgAdminSetOrgUserContactEmail(orgID, email, contactEmail).then((res) => { orgAdminAPI.orgAdminSetOrgUserContactEmail(orgID, email, contactEmail).then((res) => {
const newContactEmail = contactEmail ? res.data.contact_email : ''; const newContactEmail = contactEmail ? res.data.contact_email : '';
this.props.updateContactEmail(newContactEmail); this.props.updateContactEmail(newContactEmail);
this.props.toggleDialog(); this.props.toggleDialog();

View File

@@ -1,9 +1,8 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Modal, ModalHeader, ModalBody, ModalFooter, InputGroup, InputGroupAddon, InputGroupText } from 'reactstrap'; import { Modal, ModalHeader, ModalBody, ModalFooter, InputGroup, InputGroupAddon, InputGroupText } from 'reactstrap';
import { gettext } from '../../utils/constants'; import { gettext } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
const propTypes = { const propTypes = {
@@ -45,7 +44,7 @@ class SetOrgUserDefaultQuota extends React.Component {
submitBtnDisabled: true submitBtnDisabled: true
}); });
seafileAPI.orgAdminSetOrgUserDefaultQuota(orgID, quota).then((res) => { orgAdminAPI.orgAdminSetOrgUserDefaultQuota(orgID, quota).then((res) => {
this.props.updateQuota(res.data.user_default_quota); this.props.updateQuota(res.data.user_default_quota);
this.props.toggleDialog(); this.props.toggleDialog();
}).catch((error) => { }).catch((error) => {

View File

@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap'; import { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
import { gettext } from '../../utils/constants'; import { gettext } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
const propTypes = { const propTypes = {
@@ -39,7 +39,7 @@ class SetOrgUserName extends React.Component {
// when name is '', api returns the previous name // when name is '', api returns the previous name
// but newName needs to be '' // but newName needs to be ''
seafileAPI.orgAdminSetOrgUserName(orgID, email, name).then((res) => { orgAdminAPI.orgAdminSetOrgUserName(orgID, email, name).then((res) => {
const newName = name ? res.data.name : ''; const newName = name ? res.data.name : '';
this.props.updateName(newName); this.props.updateName(newName);
this.props.toggleDialog(); this.props.toggleDialog();

View File

@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Modal, ModalHeader, ModalBody, ModalFooter, InputGroup, InputGroupAddon, InputGroupText } from 'reactstrap'; import { Modal, ModalHeader, ModalBody, ModalFooter, InputGroup, InputGroupAddon, InputGroupText } from 'reactstrap';
import { gettext } from '../../utils/constants'; import { gettext } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
const propTypes = { const propTypes = {
@@ -46,7 +46,7 @@ class SetOrgUserQuota extends React.Component {
submitBtnDisabled: true submitBtnDisabled: true
}); });
seafileAPI.orgAdminSetOrgUserQuota(orgID, email, quota).then((res) => { orgAdminAPI.orgAdminSetOrgUserQuota(orgID, email, quota).then((res) => {
this.props.updateQuota(res.data.quota_total); this.props.updateQuota(res.data.quota_total);
this.props.toggleDialog(); this.props.toggleDialog();
}).catch((error) => { }).catch((error) => {

View File

@@ -5,6 +5,7 @@ import { Button, Modal, ModalHeader, ModalBody, ModalFooter,
import makeAnimated from 'react-select/animated'; import makeAnimated from 'react-select/animated';
import { seafileAPI } from '../../utils/seafile-api'; import { seafileAPI } from '../../utils/seafile-api';
import { systemAdminAPI } from '../../utils/system-admin-api'; import { systemAdminAPI } from '../../utils/system-admin-api';
import { orgAdminAPI } from '../../utils/org-admin-api';
import { gettext, isPro, orgID } from '../../utils/constants'; import { gettext, isPro, orgID } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../toast'; import toaster from '../toast';
@@ -61,7 +62,7 @@ class TransferDialog extends React.Component {
componentDidMount() { componentDidMount() {
if (this.props.isOrgAdmin) { if (this.props.isOrgAdmin) {
seafileAPI.orgAdminListDepartments(orgID).then((res) => { orgAdminAPI.orgAdminListDepartments(orgID).then((res) => {
this.updateOptions(res); this.updateOptions(res);
}).catch(error => { }).catch(error => {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);

View File

@@ -1,7 +1,7 @@
import React, { Fragment } from 'react'; import React, { Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import { Utils } from '../../../utils/utils'; import { Utils } from '../../../utils/utils';
import toaster from '../../../components/toast'; import toaster from '../../../components/toast';
import ModalPortal from '../../../components/modal-portal'; import ModalPortal from '../../../components/modal-portal';
@@ -34,7 +34,7 @@ class OrgDepartmentItem extends React.Component {
} }
listOrgGroupRepo = (groupID) => { listOrgGroupRepo = (groupID) => {
seafileAPI.orgAdminListGroupRepos(orgID, groupID).then(res => { orgAdminAPI.orgAdminListGroupRepos(orgID, groupID).then(res => {
this.setState({ repos: res.data.libraries }); this.setState({ repos: res.data.libraries });
}).catch(error => { }).catch(error => {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);

View File

@@ -1,6 +1,6 @@
import React, { Fragment } from 'react'; import React, { Fragment } from 'react';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import MainPanelTopbar from '../main-panel-topbar'; import MainPanelTopbar from '../main-panel-topbar';
import ModalPortal from '../../../components/modal-portal'; import ModalPortal from '../../../components/modal-portal';
import AddDepartDialog from '../../../components/dialog/org-add-department-dialog'; import AddDepartDialog from '../../../components/dialog/org-add-department-dialog';
@@ -30,7 +30,7 @@ class OrgDepartmentsList extends React.Component {
} }
listDepartGroups = () => { listDepartGroups = () => {
seafileAPI.orgAdminListDepartGroups(orgID).then(res => { orgAdminAPI.orgAdminListDepartGroups(orgID).then(res => {
this.setState({ groups: res.data.data }); this.setState({ groups: res.data.data });
}); });
}; };

View File

@@ -1,7 +1,7 @@
import React, { Fragment } from 'react'; import React, { Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import { Utils } from '../../../utils/utils'; import { Utils } from '../../../utils/utils';
import toaster from '../../../components/toast'; import toaster from '../../../components/toast';
import ModalPortal from '../../../components/modal-portal'; import ModalPortal from '../../../components/modal-portal';
@@ -52,7 +52,7 @@ class OrgDepartmentItem extends React.Component {
} }
listOrgGroupRepo = (groupID) => { listOrgGroupRepo = (groupID) => {
seafileAPI.orgAdminListGroupRepos(orgID, groupID).then(res => { orgAdminAPI.orgAdminListGroupRepos(orgID, groupID).then(res => {
this.setState({ repos: res.data.libraries }); this.setState({ repos: res.data.libraries });
}).catch(error => { }).catch(error => {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);
@@ -61,7 +61,7 @@ class OrgDepartmentItem extends React.Component {
}; };
listOrgMembers = (groupID) => { listOrgMembers = (groupID) => {
seafileAPI.orgAdminListGroupInfo(orgID, groupID, true).then(res => { orgAdminAPI.orgAdminListGroupInfo(orgID, groupID, true).then(res => {
this.setState({ this.setState({
members: res.data.members, members: res.data.members,
groups: res.data.groups, groups: res.data.groups,
@@ -75,7 +75,7 @@ class OrgDepartmentItem extends React.Component {
}; };
listSubDepartGroups = (groupID) => { listSubDepartGroups = (groupID) => {
seafileAPI.orgAdminListGroupInfo(orgID, groupID, true).then(res => { orgAdminAPI.orgAdminListGroupInfo(orgID, groupID, true).then(res => {
this.setState({ groups: res.data.groups }); this.setState({ groups: res.data.groups });
}).catch(error => { }).catch(error => {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);
@@ -240,7 +240,7 @@ class MemberItem extends React.Component {
onChangeUserRole = (roleOption) => { onChangeUserRole = (roleOption) => {
let isAdmin = roleOption.value === 'Admin' ? true : false; let isAdmin = roleOption.value === 'Admin' ? true : false;
seafileAPI.orgAdminSetGroupMemberRole(orgID, this.props.groupID, this.props.member.email, isAdmin).then((res) => { orgAdminAPI.orgAdminSetGroupMemberRole(orgID, this.props.groupID, this.props.member.email, isAdmin).then((res) => {
this.props.onMemberChanged(); this.props.onMemberChanged();
}).catch(error => { }).catch(error => {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);

View File

@@ -2,7 +2,7 @@ import React, { Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { Link } from '@gatsbyjs/reach-router'; import { Link } from '@gatsbyjs/reach-router';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import { Utils } from '../../../utils/utils'; import { Utils } from '../../../utils/utils';
import toaster from '../../../components/toast'; import toaster from '../../../components/toast';
import MainPanelTopbar from '../main-panel-topbar'; import MainPanelTopbar from '../main-panel-topbar';
@@ -57,7 +57,7 @@ class OrgDepartmentItem extends React.Component {
} }
listOrgMembers = (groupID) => { listOrgMembers = (groupID) => {
seafileAPI.orgAdminListGroupInfo(orgID, groupID, true).then(res => { orgAdminAPI.orgAdminListGroupInfo(orgID, groupID, true).then(res => {
this.setState({ this.setState({
members: res.data.members, members: res.data.members,
groups: res.data.groups, groups: res.data.groups,

View File

@@ -1,7 +1,7 @@
import React, { Fragment } from 'react'; import React, { Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import { Utils } from '../../../utils/utils'; import { Utils } from '../../../utils/utils';
import toaster from '../../../components/toast'; import toaster from '../../../components/toast';
import { gettext, orgID, lang } from '../../../utils/constants'; import { gettext, orgID, lang } from '../../../utils/constants';
@@ -41,7 +41,7 @@ class OrgDepartmentItem extends React.Component {
} }
listOrgMembers = (groupID) => { listOrgMembers = (groupID) => {
seafileAPI.orgAdminListGroupInfo(orgID, groupID, true).then(res => { orgAdminAPI.orgAdminListGroupInfo(orgID, groupID, true).then(res => {
this.setState({ this.setState({
members: res.data.members, members: res.data.members,
groups: res.data.groups, groups: res.data.groups,
@@ -55,7 +55,7 @@ class OrgDepartmentItem extends React.Component {
}; };
listSubDepartGroups = (groupID) => { listSubDepartGroups = (groupID) => {
seafileAPI.orgAdminListGroupInfo(orgID, groupID, true).then(res => { orgAdminAPI.orgAdminListGroupInfo(orgID, groupID, true).then(res => {
this.setState({ groups: res.data.groups }); this.setState({ groups: res.data.groups });
}).catch(error => { }).catch(error => {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);

View File

@@ -2,7 +2,7 @@ import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime'; import relativeTime from 'dayjs/plugin/relativeTime';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import { orgID, gettext } from '../../../utils/constants'; import { orgID, gettext } from '../../../utils/constants';
import toaster from '../../../components/toast'; import toaster from '../../../components/toast';
import { Utils } from '../../../utils/utils'; import { Utils } from '../../../utils/utils';
@@ -117,7 +117,7 @@ class Item extends Component {
unlinkDevice = (deleteFiles) => { unlinkDevice = (deleteFiles) => {
const { platform, device_id, user } = this.props.item; const { platform, device_id, user } = this.props.item;
seafileAPI.orgAdminUnlinkDevice(orgID, platform, device_id, user, deleteFiles).then((res) => { orgAdminAPI.orgAdminUnlinkDevice(orgID, platform, device_id, user, deleteFiles).then((res) => {
this.setState({ unlinked: true }); this.setState({ unlinked: true });
let message = gettext('Successfully unlinked the device.'); let message = gettext('Successfully unlinked the device.');
toaster.success(message); toaster.success(message);
@@ -191,7 +191,7 @@ class DevicesByPlatform extends Component {
getDevicesListByPage = (page) => { getDevicesListByPage = (page) => {
let platform = this.props.devicesPlatform; let platform = this.props.devicesPlatform;
let per_page = this.state.perPage; let per_page = this.state.perPage;
seafileAPI.orgAdminListDevices(orgID, platform, page, per_page).then((res) => { orgAdminAPI.orgAdminListDevices(orgID, platform, page, per_page).then((res) => {
this.setState({ this.setState({
devicesData: res.data.devices, devicesData: res.data.devices,
pageInfo: res.data.page_info, pageInfo: res.data.page_info,

View File

@@ -4,7 +4,7 @@ import { Button } from 'reactstrap';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime'; import relativeTime from 'dayjs/plugin/relativeTime';
import { Link } from '@gatsbyjs/reach-router'; import { Link } from '@gatsbyjs/reach-router';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import { siteRoot, gettext, orgID } from '../../../utils/constants'; import { siteRoot, gettext, orgID } from '../../../utils/constants';
import toaster from '../../../components/toast'; import toaster from '../../../components/toast';
import { Utils } from '../../../utils/utils'; import { Utils } from '../../../utils/utils';
@@ -150,7 +150,7 @@ class OrgDevicesErrors extends Component {
getDeviceErrorsListByPage = (page) => { getDeviceErrorsListByPage = (page) => {
let per_page = this.state.perPage; let per_page = this.state.perPage;
seafileAPI.orgAdminListDevicesErrors(orgID, page, per_page).then((res) => { orgAdminAPI.orgAdminListDevicesErrors(orgID, page, per_page).then((res) => {
this.setState({ this.setState({
loading: false, loading: false,
devicesErrors: res.data.device_errors, devicesErrors: res.data.device_errors,
@@ -166,7 +166,7 @@ class OrgDevicesErrors extends Component {
}; };
clean = () => { clean = () => {
seafileAPI.orgAdminClearDeviceErrors(orgID).then((res) => { orgAdminAPI.orgAdminClearDeviceErrors(orgID).then((res) => {
this.setState({ this.setState({
devicesErrors: [], devicesErrors: [],
isCleanBtnShown: false isCleanBtnShown: false

View File

@@ -2,7 +2,7 @@ import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
import { Utils } from '../../../utils/utils'; import { Utils } from '../../../utils/utils';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import { gettext, siteRoot, mediaUrl, orgID } from '../../../utils/constants'; import { gettext, siteRoot, mediaUrl, orgID } from '../../../utils/constants';
import toaster from '../../../components/toast/index'; import toaster from '../../../components/toast/index';
import EmptyTip from '../../../components/empty-tip'; import EmptyTip from '../../../components/empty-tip';
@@ -14,7 +14,6 @@ import { navigate } from '@gatsbyjs/reach-router';
import OrgAdminRepo from '../../../models/org-admin-repo'; import OrgAdminRepo from '../../../models/org-admin-repo';
import MainPanelTopbar from '../main-panel-topbar'; import MainPanelTopbar from '../main-panel-topbar';
import ReposNav from './org-repo-nav'; import ReposNav from './org-repo-nav';
import { orgAdminAPI } from '../../../utils/org-admin-api';
class Content extends Component { class Content extends Component {
@@ -315,7 +314,7 @@ class OrgAllRepos extends Component {
getReposByPage = (page) => { getReposByPage = (page) => {
let { perPage } = this.state; let { perPage } = this.state;
seafileAPI.orgAdminListOrgRepos(orgID, page, perPage, this.state.sortBy).then((res) => { orgAdminAPI.orgAdminListOrgRepos(orgID, page, perPage, this.state.sortBy).then((res) => {
let orgRepos = res.data.repo_list.map(item => { let orgRepos = res.data.repo_list.map(item => {
return new OrgAdminRepo(item); return new OrgAdminRepo(item);
}); });
@@ -369,7 +368,7 @@ class OrgAllRepos extends Component {
deleteRepoItem = (repo) => { deleteRepoItem = (repo) => {
seafileAPI.orgAdminDeleteOrgRepo(orgID, repo.repoID).then(res => { orgAdminAPI.orgAdminDeleteOrgRepo(orgID, repo.repoID).then(res => {
this.setState({ this.setState({
repos: this.state.repos.filter(item => item.repoID !== repo.repoID) repos: this.state.repos.filter(item => item.repoID !== repo.repoID)
}); });

View File

@@ -4,7 +4,7 @@ import { Button } from 'reactstrap';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime'; import relativeTime from 'dayjs/plugin/relativeTime';
import { Utils } from '../../../utils/utils'; import { Utils } from '../../../utils/utils';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import { gettext, orgID } from '../../../utils/constants'; import { gettext, orgID } from '../../../utils/constants';
import toaster from '../../../components/toast/index'; import toaster from '../../../components/toast/index';
import EmptyTip from '../../../components/empty-tip'; import EmptyTip from '../../../components/empty-tip';
@@ -152,7 +152,7 @@ class Item extends Component {
onDeleteRepo = () => { onDeleteRepo = () => {
const repo = this.props.repo; const repo = this.props.repo;
seafileAPI.orgAdminDeleteTrashRepo(orgID, repo.id).then((res) => { orgAdminAPI.orgAdminDeleteTrashRepo(orgID, repo.id).then((res) => {
this.props.onDeleteRepo(repo); this.props.onDeleteRepo(repo);
const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.name); const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.name);
toaster.success(msg); toaster.success(msg);
@@ -164,7 +164,7 @@ class Item extends Component {
onRestoreRepo = () => { onRestoreRepo = () => {
const repo = this.props.repo; const repo = this.props.repo;
seafileAPI.orgAdminRestoreTrashRepo(orgID, repo.id).then((res) => { orgAdminAPI.orgAdminRestoreTrashRepo(orgID, repo.id).then((res) => {
this.props.onRestoreRepo(repo); this.props.onRestoreRepo(repo);
let message = gettext('Successfully restored the library.'); let message = gettext('Successfully restored the library.');
toaster.success(message); toaster.success(message);
@@ -314,7 +314,7 @@ class TrashRepos extends Component {
getReposByPage = (page) => { getReposByPage = (page) => {
let { perPage } = this.state; let { perPage } = this.state;
seafileAPI.orgAdminListTrashRepos(orgID, page, perPage).then((res) => { orgAdminAPI.orgAdminListTrashRepos(orgID, page, perPage).then((res) => {
this.setState({ this.setState({
repos: res.data.repos, repos: res.data.repos,
pageInfo: res.data.page_info, pageInfo: res.data.page_info,
@@ -355,7 +355,7 @@ class TrashRepos extends Component {
}; };
cleanTrash = () => { cleanTrash = () => {
seafileAPI.orgAdminCleanTrashRepo(orgID).then(res => { orgAdminAPI.orgAdminCleanTrashRepo(orgID).then(res => {
this.setState({ repos: [] }); this.setState({ repos: [] });
toaster.success(gettext('Successfully cleared trash.')); toaster.success(gettext('Successfully cleared trash.'));
}).catch(error => { }).catch(error => {

View File

@@ -1,7 +1,7 @@
import React, { Component, Fragment } from 'react'; import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Link } from '@gatsbyjs/reach-router'; import { Link } from '@gatsbyjs/reach-router';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { gettext, siteRoot } from '../../utils/constants'; import { gettext, siteRoot } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import Loading from '../../components/loading'; import Loading from '../../components/loading';
@@ -23,7 +23,7 @@ class OrgGroupInfo extends Component {
} }
componentDidMount() { componentDidMount() {
seafileAPI.orgAdminGetGroup(orgID, this.props.groupID).then((res) => { orgAdminAPI.orgAdminGetGroup(orgID, this.props.groupID).then((res) => {
this.setState(Object.assign({ this.setState(Object.assign({
loading: false loading: false
}, res.data)); }, res.data));

View File

@@ -1,7 +1,7 @@
import React, { Component, Fragment } from 'react'; import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Link } from '@gatsbyjs/reach-router'; import { Link } from '@gatsbyjs/reach-router';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { gettext, siteRoot } from '../../utils/constants'; import { gettext, siteRoot } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import Loading from '../../components/loading'; import Loading from '../../components/loading';
@@ -23,7 +23,7 @@ class OrgGroupMembers extends Component {
} }
componentDidMount() { componentDidMount() {
seafileAPI.orgAdminListGroupMembers(orgID, this.props.groupID).then((res) => { orgAdminAPI.orgAdminListGroupMembers(orgID, this.props.groupID).then((res) => {
this.setState(Object.assign({ this.setState(Object.assign({
loading: false loading: false
}, res.data)); }, res.data));

View File

@@ -1,7 +1,7 @@
import React, { Component, Fragment } from 'react'; import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Link } from '@gatsbyjs/reach-router'; import { Link } from '@gatsbyjs/reach-router';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { gettext, siteRoot } from '../../utils/constants'; import { gettext, siteRoot } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import Loading from '../../components/loading'; import Loading from '../../components/loading';
@@ -25,7 +25,7 @@ class OrgGroupRepos extends Component {
} }
componentDidMount() { componentDidMount() {
seafileAPI.orgAdminListGroupRepos(orgID, this.props.groupID).then((res) => { orgAdminAPI.orgAdminListGroupRepos(orgID, this.props.groupID).then((res) => {
this.setState(Object.assign({ this.setState(Object.assign({
loading: false loading: false
}, res.data)); }, res.data));
@@ -138,7 +138,7 @@ class Item extends Component {
deleteRepo = () => { deleteRepo = () => {
const repo = this.props.data; const repo = this.props.data;
seafileAPI.orgAdminDeleteOrgRepo(orgID, repo.repo_id).then((res) => { orgAdminAPI.orgAdminDeleteOrgRepo(orgID, repo.repo_id).then((res) => {
this.setState({ this.setState({
deleted: true, deleted: true,
isRepoDeleted: true, isRepoDeleted: true,

View File

@@ -2,7 +2,7 @@ import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem, Form, FormGroup, Input, Col } from 'reactstrap'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem, Form, FormGroup, Input, Col } from 'reactstrap';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { gettext, orgID, siteRoot } from '../../utils/constants'; import { gettext, orgID, siteRoot } from '../../utils/constants';
import toaster from '../../components/toast'; import toaster from '../../components/toast';
import OrgGroupInfo from '../../models/org-group'; import OrgGroupInfo from '../../models/org-group';
@@ -205,7 +205,7 @@ class OrgGroupsSearchGroups extends Component {
} }
getItems = () => { getItems = () => {
seafileAPI.orgAdminSearchGroup(orgID, this.state.query.trim()).then(res => { orgAdminAPI.orgAdminSearchGroup(orgID, this.state.query.trim()).then(res => {
let groupList = res.data.group_list.map(item => { let groupList = res.data.group_list.map(item => {
return new OrgGroupInfo(item); return new OrgGroupInfo(item);
}); });
@@ -222,7 +222,7 @@ class OrgGroupsSearchGroups extends Component {
}; };
deleteGroupItem = (group) => { deleteGroupItem = (group) => {
seafileAPI.orgAdminDeleteOrgGroup(orgID, group.id).then(res => { orgAdminAPI.orgAdminDeleteOrgGroup(orgID, group.id).then(res => {
this.setState({ this.setState({
orgGroups: this.state.orgGroups.filter(item => item.id != group.id) orgGroups: this.state.orgGroups.filter(item => item.id != group.id)
}); });

View File

@@ -3,13 +3,12 @@ import PropTypes from 'prop-types';
import { navigate } from '@gatsbyjs/reach-router'; import { navigate } from '@gatsbyjs/reach-router';
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
import { siteRoot, gettext, orgID } from '../../utils/constants'; import { siteRoot, gettext, orgID } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../../components/toast'; import toaster from '../../components/toast';
import OrgGroupInfo from '../../models/org-group'; import OrgGroupInfo from '../../models/org-group';
import MainPanelTopbar from './main-panel-topbar'; import MainPanelTopbar from './main-panel-topbar';
import ChangeGroupDialog from '../../components/dialog/change-group-dialog'; import ChangeGroupDialog from '../../components/dialog/change-group-dialog';
import { orgAdminAPI } from '../../utils/org-admin-api';
class Search extends React.Component { class Search extends React.Component {
@@ -83,7 +82,7 @@ class OrgGroups extends Component {
} }
initData = (page) => { initData = (page) => {
seafileAPI.orgAdminListOrgGroups(orgID, page).then(res => { orgAdminAPI.orgAdminListOrgGroups(orgID, page).then(res => {
let orgGroups = res.data.groups.map(item => { let orgGroups = res.data.groups.map(item => {
return new OrgGroupInfo(item); return new OrgGroupInfo(item);
}); });
@@ -121,7 +120,7 @@ class OrgGroups extends Component {
}; };
deleteGroupItem = (group) => { deleteGroupItem = (group) => {
seafileAPI.orgAdminDeleteOrgGroup(orgID, group.id).then(res => { orgAdminAPI.orgAdminDeleteOrgGroup(orgID, group.id).then(res => {
this.setState({ this.setState({
orgGroups: this.state.orgGroups.filter(item => item.id != group.id) orgGroups: this.state.orgGroups.filter(item => item.id != group.id)
}); });

View File

@@ -1,5 +1,5 @@
import React, { Component, Fragment } from 'react'; import React, { Component, Fragment } from 'react';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { mediaUrl, gettext, orgMemberQuotaEnabled } from '../../utils/constants'; import { mediaUrl, gettext, orgMemberQuotaEnabled } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import MainPanelTopbar from './main-panel-topbar'; import MainPanelTopbar from './main-panel-topbar';
@@ -25,7 +25,7 @@ class OrgInfo extends Component {
} }
componentDidMount() { componentDidMount() {
seafileAPI.orgAdminGetOrgInfo().then(res => { orgAdminAPI.orgAdminGetOrgInfo().then(res => {
const { const {
org_id, org_name, org_id, org_name,
member_quota, member_usage, active_members, member_quota, member_usage, active_members,

View File

@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime'; import relativeTime from 'dayjs/plugin/relativeTime';
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { siteRoot, gettext, serviceURL } from '../../utils/constants'; import { siteRoot, gettext, serviceURL } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../../components/toast'; import toaster from '../../components/toast';
@@ -27,7 +27,7 @@ class OrgLinks extends React.Component {
} }
listOrgLinks = (page) => { listOrgLinks = (page) => {
seafileAPI.orgAdminListOrgLinks(page).then(res => { orgAdminAPI.orgAdminListOrgLinks(page).then(res => {
const data = res.data; const data = res.data;
this.setState({ this.setState({
linkList: data.link_list, linkList: data.link_list,
@@ -57,7 +57,7 @@ class OrgLinks extends React.Component {
}; };
deleteOrgLink = (token) => { deleteOrgLink = (token) => {
seafileAPI.orgAdminDeleteOrgLink(token).then(res => { orgAdminAPI.orgAdminDeleteOrgLink(token).then(res => {
if (res.data.success === true) { if (res.data.success === true) {
this.listOrgLinks(this.state.page); this.listOrgLinks(this.state.page);
} }

View File

@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { siteRoot, gettext, lang } from '../../utils/constants'; import { siteRoot, gettext, lang } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../../components/toast'; import toaster from '../../components/toast';
@@ -33,7 +33,7 @@ class OrgLogsFileAudit extends React.Component {
} }
initData = (email, repoID, page) => { initData = (email, repoID, page) => {
seafileAPI.orgAdminListFileAudit(email, repoID, page).then(res => { orgAdminAPI.orgAdminListFileAudit(email, repoID, page).then(res => {
let eventList = res.data.log_list.map(item => { let eventList = res.data.log_list.map(item => {
return new OrgLogsFileAuditEvent(item); return new OrgLogsFileAuditEvent(item);
}); });

View File

@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { siteRoot, gettext, lang } from '../../utils/constants'; import { siteRoot, gettext, lang } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../../components/toast'; import toaster from '../../components/toast';
@@ -38,7 +38,7 @@ class OrgLogsFileUpdate extends Component {
} }
initData = (email, repoID, page) => { initData = (email, repoID, page) => {
seafileAPI.orgAdminListFileUpdate(email, repoID, page).then(res => { orgAdminAPI.orgAdminListFileUpdate(email, repoID, page).then(res => {
let eventList = res.data.log_list.map(item => { let eventList = res.data.log_list.map(item => {
return new OrgLogsFileUpdateEvent(item); return new OrgLogsFileUpdateEvent(item);
}); });

View File

@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { siteRoot, gettext, lang } from '../../utils/constants'; import { siteRoot, gettext, lang } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../../components/toast'; import toaster from '../../components/toast';
@@ -33,7 +33,7 @@ class OrgLogsFileUpdate extends Component {
} }
initData = (email, repoID, page) => { initData = (email, repoID, page) => {
seafileAPI.orgAdminListPermAudit(email, repoID, page).then(res => { orgAdminAPI.orgAdminListPermAudit(email, repoID, page).then(res => {
let eventList = res.data.log_list.map(item => { let eventList = res.data.log_list.map(item => {
return new OrgLogsFilePermEvent(item); return new OrgLogsFilePermEvent(item);
}); });

View File

@@ -5,7 +5,7 @@ import MainPanelTopbar from './main-panel-topbar';
import toaster from '../../components/toast'; import toaster from '../../components/toast';
import Loading from '../../components/loading'; import Loading from '../../components/loading';
import { gettext, orgID, serviceURL } from '../../utils/constants'; import { gettext, orgID, serviceURL } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import Section from './section'; import Section from './section';
import OrgSamlConfigInput from './input-item'; import OrgSamlConfigInput from './input-item';
@@ -27,7 +27,7 @@ class OrgSAMLConfig extends Component {
} }
componentDidMount() { componentDidMount() {
seafileAPI.orgAdminGetSamlConfig(orgID).then((res) => { orgAdminAPI.orgAdminGetSamlConfig(orgID).then((res) => {
this.setState({ this.setState({
loading: false, loading: false,
samlConfigID: res.data.saml_config.id, samlConfigID: res.data.saml_config.id,
@@ -53,7 +53,7 @@ class OrgSAMLConfig extends Component {
if (changeType === 'domain') domain = value; if (changeType === 'domain') domain = value;
if (changeType === 'idpCertificate') idpCertificate = value; if (changeType === 'idpCertificate') idpCertificate = value;
seafileAPI.orgAdminUpdateSamlConfig(orgID, metadataUrl, domain, idpCertificate).then((res) => { orgAdminAPI.orgAdminUpdateSamlConfig(orgID, metadataUrl, domain, idpCertificate).then((res) => {
this.setState({ this.setState({
samlConfigID: res.data.saml_config.id, samlConfigID: res.data.saml_config.id,
metadataUrl: res.data.saml_config.metadata_url, metadataUrl: res.data.saml_config.metadata_url,
@@ -71,7 +71,7 @@ class OrgSAMLConfig extends Component {
verifyDomain = () => { verifyDomain = () => {
const { domain } = this.state; const { domain } = this.state;
seafileAPI.orgAdminVerifyDomain(orgID, domain).then((res) => { orgAdminAPI.orgAdminVerifyDomain(orgID, domain).then((res) => {
this.setState({ domainVerified: res.data.domain_verified }); this.setState({ domainVerified: res.data.domain_verified });
toaster.success(gettext('Domain verified')); toaster.success(gettext('Domain verified'));
}).catch((error) => { }).catch((error) => {

View File

@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
import { gettext, siteRoot, orgID, username } from '../../utils/constants'; import { gettext, siteRoot, orgID, username } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import toaster from '../../components/toast'; import toaster from '../../components/toast';
import Selector from '../../components/single-selector'; import Selector from '../../components/single-selector';
@@ -58,7 +58,7 @@ class UserItem extends React.Component {
toggleResetPW = () => { toggleResetPW = () => {
const { email } = this.props.user; const { email } = this.props.user;
toaster.success(gettext('Resetting user\'s password, please wait for a moment.')); toaster.success(gettext('Resetting user\'s password, please wait for a moment.'));
seafileAPI.orgAdminResetOrgUserPassword(orgID, email).then(res => { orgAdminAPI.orgAdminResetOrgUserPassword(orgID, email).then(res => {
toaster.success(res.data.reset_tip); toaster.success(res.data.reset_tip);
}).catch(error => { }).catch(error => {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);

View File

@@ -1,6 +1,6 @@
import React, { Component, Fragment } from 'react'; import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { gettext } from '../../utils/constants'; import { gettext } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import Loading from '../../components/loading'; import Loading from '../../components/loading';
@@ -26,7 +26,7 @@ class OrgUserProfile extends Component {
componentDidMount() { componentDidMount() {
const email = decodeURIComponent(this.props.email); const email = decodeURIComponent(this.props.email);
seafileAPI.orgAdminGetOrgUserInfo(orgID, email).then((res) => { orgAdminAPI.orgAdminGetOrgUserInfo(orgID, email).then((res) => {
this.setState(Object.assign({ this.setState(Object.assign({
loading: false loading: false
}, res.data)); }, res.data));

View File

@@ -1,7 +1,7 @@
import React, { Component, Fragment } from 'react'; import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { gettext } from '../../utils/constants'; import { gettext } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import Loading from '../../components/loading'; import Loading from '../../components/loading';
@@ -26,7 +26,7 @@ class OrgUserOwnedRepos extends Component {
componentDidMount() { componentDidMount() {
const email = decodeURIComponent(this.props.email); const email = decodeURIComponent(this.props.email);
seafileAPI.orgAdminGetOrgUserOwnedRepos(orgID, email).then((res) => { orgAdminAPI.orgAdminGetOrgUserOwnedRepos(orgID, email).then((res) => {
this.setState(Object.assign({ this.setState(Object.assign({
loading: false loading: false
}, res.data)); }, res.data));
@@ -134,7 +134,7 @@ class Item extends Component {
deleteRepo = () => { deleteRepo = () => {
const repo = this.props.data; const repo = this.props.data;
seafileAPI.orgAdminDeleteOrgRepo(orgID, repo.repo_id).then((res) => { orgAdminAPI.orgAdminDeleteOrgRepo(orgID, repo.repo_id).then((res) => {
this.setState({ this.setState({
deleted: true, deleted: true,
isRepoDeleted: true, isRepoDeleted: true,

View File

@@ -1,7 +1,7 @@
import React, { Component, Fragment } from 'react'; import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { gettext } from '../../utils/constants'; import { gettext } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import Loading from '../../components/loading'; import Loading from '../../components/loading';
@@ -24,7 +24,7 @@ class OrgUserSharedRepos extends Component {
componentDidMount() { componentDidMount() {
const email = decodeURIComponent(this.props.email); const email = decodeURIComponent(this.props.email);
seafileAPI.orgAdminGetOrgUserBesharedRepos(orgID, email).then((res) => { orgAdminAPI.orgAdminGetOrgUserBesharedRepos(orgID, email).then((res) => {
this.setState(Object.assign({ this.setState(Object.assign({
loading: false loading: false
}, res.data)); }, res.data));

View File

@@ -5,7 +5,7 @@ import MainPanelTopbar from './main-panel-topbar';
import AddOrgAdminDialog from '../../components/dialog/org-add-admin-dialog'; import AddOrgAdminDialog from '../../components/dialog/org-add-admin-dialog';
import ModalPortal from '../../components/modal-portal'; import ModalPortal from '../../components/modal-portal';
import toaster from '../../components/toast'; import toaster from '../../components/toast';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import OrgUserInfo from '../../models/org-user'; import OrgUserInfo from '../../models/org-user';
import { gettext, orgID } from '../../utils/constants'; import { gettext, orgID } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
@@ -25,7 +25,7 @@ class OrgUsers extends Component {
}; };
initOrgAdmin = () => { initOrgAdmin = () => {
seafileAPI.orgAdminListOrgUsers(orgID, true).then(res => { orgAdminAPI.orgAdminListOrgUsers(orgID, true).then(res => {
let userList = res.data.user_list.map(item => { let userList = res.data.user_list.map(item => {
return new OrgUserInfo(item); return new OrgUserInfo(item);
}); });
@@ -37,7 +37,7 @@ class OrgUsers extends Component {
}; };
toggleOrgAdminDelete = (email, username) => { toggleOrgAdminDelete = (email, username) => {
seafileAPI.orgAdminDeleteOrgUser(orgID, email).then(res => { orgAdminAPI.orgAdminDeleteOrgUser(orgID, email).then(res => {
this.setState({ this.setState({
orgAdminUsers: this.state.orgAdminUsers.filter(item => item.email != email) orgAdminUsers: this.state.orgAdminUsers.filter(item => item.email != email)
}); });
@@ -51,7 +51,7 @@ class OrgUsers extends Component {
}; };
toggleRevokeAdmin = (email) => { toggleRevokeAdmin = (email) => {
seafileAPI.orgAdminSetOrgAdmin(orgID, email, false).then(res => { orgAdminAPI.orgAdminSetOrgAdmin(orgID, email, false).then(res => {
this.setState({ this.setState({
orgAdminUsers: this.state.orgAdminUsers.filter(item => item.email != email) orgAdminUsers: this.state.orgAdminUsers.filter(item => item.email != email)
}); });
@@ -76,7 +76,7 @@ class OrgUsers extends Component {
}; };
changeStatus = (email, isActive) => { changeStatus = (email, isActive) => {
seafileAPI.orgAdminChangeOrgUserStatus(orgID, email, isActive).then(res => { orgAdminAPI.orgAdminChangeOrgUserStatus(orgID, email, isActive).then(res => {
let users = this.state.orgAdminUsers.map(item => { let users = this.state.orgAdminUsers.map(item => {
if (item.email == email) { if (item.email == email) {
item['is_active'] = res.data['is_active']; item['is_active'] = res.data['is_active'];

View File

@@ -2,7 +2,7 @@ import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Form, FormGroup, Input, Col } from 'reactstrap'; import { Form, FormGroup, Input, Col } from 'reactstrap';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import { gettext, orgID } from '../../utils/constants'; import { gettext, orgID } from '../../utils/constants';
import toaster from '../../components/toast'; import toaster from '../../components/toast';
import UserItem from './org-user-item'; import UserItem from './org-user-item';
@@ -90,7 +90,7 @@ class OrgUsersSearchUsers extends Component {
} }
getItems = () => { getItems = () => {
seafileAPI.orgAdminSearchUser(orgID, this.state.query.trim()).then(res => { orgAdminAPI.orgAdminSearchUser(orgID, this.state.query.trim()).then(res => {
let userList = res.data.user_list.map(item => { let userList = res.data.user_list.map(item => {
return new OrgUserInfo(item); return new OrgUserInfo(item);
}); });
@@ -107,7 +107,7 @@ class OrgUsersSearchUsers extends Component {
}; };
deleteUser = (email, username) => { deleteUser = (email, username) => {
seafileAPI.orgAdminDeleteOrgUser(orgID, email).then(res => { orgAdminAPI.orgAdminDeleteOrgUser(orgID, email).then(res => {
let newUserList = this.state.orgUsers.filter(item => { let newUserList = this.state.orgUsers.filter(item => {
return item.email != email; return item.email != email;
}); });
@@ -144,7 +144,7 @@ class OrgUsersSearchUsers extends Component {
}; };
changeStatus = (email, isActive) => { changeStatus = (email, isActive) => {
seafileAPI.orgAdminChangeOrgUserStatus(orgID, email, isActive).then(res => { orgAdminAPI.orgAdminChangeOrgUserStatus(orgID, email, isActive).then(res => {
let users = this.state.orgUsers.map(item => { let users = this.state.orgUsers.map(item => {
if (item.email == email) { if (item.email == email) {
item['is_active'] = res.data['is_active']; item['is_active'] = res.data['is_active'];

View File

@@ -10,7 +10,7 @@ import AddOrgUserDialog from '../../components/dialog/org-add-user-dialog';
import InviteUserDialog from '../../components/dialog/org-admin-invite-user-dialog'; import InviteUserDialog from '../../components/dialog/org-admin-invite-user-dialog';
import InviteUserViaWeiXinDialog from '../../components/dialog/org-admin-invite-user-via-weixin-dialog'; import InviteUserViaWeiXinDialog from '../../components/dialog/org-admin-invite-user-via-weixin-dialog';
import toaster from '../../components/toast'; import toaster from '../../components/toast';
import { seafileAPI } from '../../utils/seafile-api'; import { orgAdminAPI } from '../../utils/org-admin-api';
import OrgUserInfo from '../../models/org-user'; import OrgUserInfo from '../../models/org-user';
import { gettext, invitationLink, orgID, siteRoot, orgEnableAdminInviteUser } from '../../utils/constants'; import { gettext, invitationLink, orgID, siteRoot, orgEnableAdminInviteUser } from '../../utils/constants';
import { Utils } from '../../utils/utils'; import { Utils } from '../../utils/utils';
@@ -138,7 +138,7 @@ class OrgUsers extends Component {
initOrgUsersData = (page) => { initOrgUsersData = (page) => {
const { sortBy, sortOrder } = this.state; const { sortBy, sortOrder } = this.state;
seafileAPI.orgAdminListOrgUsers(orgID, '', page, sortBy, sortOrder).then(res => { orgAdminAPI.orgAdminListOrgUsers(orgID, '', page, sortBy, sortOrder).then(res => {
let userList = res.data.user_list.map(item => { let userList = res.data.user_list.map(item => {
return new OrgUserInfo(item); return new OrgUserInfo(item);
}); });
@@ -155,7 +155,7 @@ class OrgUsers extends Component {
importOrgUsers = (file) => { importOrgUsers = (file) => {
toaster.notify(gettext('It may take some time, please wait.')); toaster.notify(gettext('It may take some time, please wait.'));
seafileAPI.orgAdminImportUsersViaFile(orgID, file).then((res) => { orgAdminAPI.orgAdminImportUsersViaFile(orgID, file).then((res) => {
if (res.data.success.length) { if (res.data.success.length) {
const users = res.data.success.map(item => { const users = res.data.success.map(item => {
if (item.institution == undefined) { if (item.institution == undefined) {
@@ -178,7 +178,7 @@ class OrgUsers extends Component {
}; };
addOrgUser = (email, name, password) => { addOrgUser = (email, name, password) => {
seafileAPI.orgAdminAddOrgUser(orgID, email, name, password).then(res => { orgAdminAPI.orgAdminAddOrgUser(orgID, email, name, password).then(res => {
let userInfo = new OrgUserInfo(res.data); let userInfo = new OrgUserInfo(res.data);
this.state.orgUsers.unshift(userInfo); this.state.orgUsers.unshift(userInfo);
this.setState({ this.setState({
@@ -196,7 +196,7 @@ class OrgUsers extends Component {
}; };
toggleOrgUsersDelete = (email, username) => { toggleOrgUsersDelete = (email, username) => {
seafileAPI.orgAdminDeleteOrgUser(orgID, email).then(res => { orgAdminAPI.orgAdminDeleteOrgUser(orgID, email).then(res => {
let users = this.state.orgUsers.filter(item => item.email != email); let users = this.state.orgUsers.filter(item => item.email != email);
this.setState({ orgUsers: users }); this.setState({ orgUsers: users });
let msg = gettext('Deleted user %s'); let msg = gettext('Deleted user %s');
@@ -209,7 +209,7 @@ class OrgUsers extends Component {
}; };
inviteOrgUser = (emails) => { inviteOrgUser = (emails) => {
seafileAPI.orgAdminInviteOrgUsers(orgID, emails.split(',')).then(res => { orgAdminAPI.orgAdminInviteOrgUsers(orgID, emails.split(',')).then(res => {
this.toggleInviteUserDialog(); this.toggleInviteUserDialog();
let users = res.data.success.map(user => { let users = res.data.success.map(user => {
return new OrgUserInfo(user); return new OrgUserInfo(user);
@@ -236,7 +236,7 @@ class OrgUsers extends Component {
}; };
changeStatus = (email, isActive) => { changeStatus = (email, isActive) => {
seafileAPI.orgAdminChangeOrgUserStatus(orgID, email, isActive).then(res => { orgAdminAPI.orgAdminChangeOrgUserStatus(orgID, email, isActive).then(res => {
let users = this.state.orgUsers.map(item => { let users = this.state.orgUsers.map(item => {
if (item.email == email) { if (item.email == email) {
item['is_active'] = res.data['is_active']; item['is_active'] = res.data['is_active'];

View File

@@ -3,7 +3,7 @@ import dayjs from 'dayjs';
import MainPanelTopbar from '../main-panel-topbar'; import MainPanelTopbar from '../main-panel-topbar';
import StatisticNav from './statistic-nav'; import StatisticNav from './statistic-nav';
import StatisticCommonTool from './statistic-common-tool'; import StatisticCommonTool from './statistic-common-tool';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import StatisticChart from './statistic-chart'; import StatisticChart from './statistic-chart';
import Loading from '../../../components/loading'; import Loading from '../../../components/loading';
import { gettext, orgID } from '../../../utils/constants'; import { gettext, orgID } from '../../../utils/constants';
@@ -26,7 +26,7 @@ class OrgStatisticFile extends React.Component {
getActiviesFiles = (startTime, endTime, groupBy) => { getActiviesFiles = (startTime, endTime, groupBy) => {
let { filesData } = this.state; let { filesData } = this.state;
seafileAPI.orgAdminStatisticFiles(orgID, startTime, endTime, groupBy).then((res) => { orgAdminAPI.orgAdminStatisticFiles(orgID, startTime, endTime, groupBy).then((res) => {
let labels = []; let labels = [];
let added = []; let added = [];
let deleted = []; let deleted = [];

View File

@@ -3,7 +3,7 @@ import dayjs from 'dayjs';
import MainPanelTopbar from '../main-panel-topbar'; import MainPanelTopbar from '../main-panel-topbar';
import StatisticNav from './statistic-nav'; import StatisticNav from './statistic-nav';
import StatisticCommonTool from './statistic-common-tool'; import StatisticCommonTool from './statistic-common-tool';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import StatisticChart from './statistic-chart'; import StatisticChart from './statistic-chart';
import Loading from '../../../components/loading'; import Loading from '../../../components/loading';
import { gettext, orgID } from '../../../utils/constants'; import { gettext, orgID } from '../../../utils/constants';
@@ -23,7 +23,7 @@ class OrgStatisticStorage extends React.Component {
getActiviesFiles = (startTime, endTime, groupBy) => { getActiviesFiles = (startTime, endTime, groupBy) => {
let { filesData } = this.state; let { filesData } = this.state;
seafileAPI.orgAdminStatisticStorages(orgID, startTime, endTime, groupBy).then((res) => { orgAdminAPI.orgAdminStatisticStorages(orgID, startTime, endTime, groupBy).then((res) => {
let labels = []; let labels = [];
let totalStorage = []; let totalStorage = [];
let data = res.data; let data = res.data;

View File

@@ -3,7 +3,7 @@ import { Input } from 'reactstrap';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import TrafficTable from './traffic-table'; import TrafficTable from './traffic-table';
import TrafficTableBody from './traffic-table-body'; import TrafficTableBody from './traffic-table-body';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import Paginator from '../../../components/paginator'; import Paginator from '../../../components/paginator';
import Loading from '../../../components/loading'; import Loading from '../../../components/loading';
import { gettext, orgID } from '../../../utils/constants'; import { gettext, orgID } from '../../../utils/constants';
@@ -79,7 +79,7 @@ class UsersTraffic extends React.Component {
isLoading: true, isLoading: true,
errorMessage: '' errorMessage: ''
}); });
seafileAPI.orgAdminListUserTraffic(orgID, month, page, perPage, orderBy).then(res => { orgAdminAPI.orgAdminListUserTraffic(orgID, month, page, perPage, orderBy).then(res => {
let userTrafficList = res.data.user_monthly_traffic_list.slice(0); let userTrafficList = res.data.user_monthly_traffic_list.slice(0);
this.setState({ this.setState({
month: month, month: month,

View File

@@ -1,7 +1,7 @@
import React, { Fragment } from 'react'; import React, { Fragment } from 'react';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { gettext, orgID } from '../../../utils/constants'; import { gettext, orgID } from '../../../utils/constants';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import MainPanelTopbar from '../main-panel-topbar'; import MainPanelTopbar from '../main-panel-topbar';
import StatisticNav from './statistic-nav'; import StatisticNav from './statistic-nav';
import StatisticCommonTool from './statistic-common-tool'; import StatisticCommonTool from './statistic-common-tool';
@@ -31,7 +31,7 @@ class OrgStatisticTraffic extends React.Component {
}; };
getActiviesFiles = (startTime, endTime, groupBy) => { getActiviesFiles = (startTime, endTime, groupBy) => {
seafileAPI.orgAdminStatisticSystemTraffic(orgID, startTime, endTime, groupBy).then((res) => { orgAdminAPI.orgAdminStatisticSystemTraffic(orgID, startTime, endTime, groupBy).then((res) => {
let labels = []; let labels = [];
let total_upload = []; let total_upload = [];
let total_download = []; let total_download = [];

View File

@@ -4,7 +4,7 @@ import { gettext, orgID } from '../../../utils/constants';
import MainPanelTopbar from '../main-panel-topbar'; import MainPanelTopbar from '../main-panel-topbar';
import StatisticNav from './statistic-nav'; import StatisticNav from './statistic-nav';
import StatisticCommonTool from './statistic-common-tool'; import StatisticCommonTool from './statistic-common-tool';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import StatisticChart from './statistic-chart'; import StatisticChart from './statistic-chart';
import Loading from '../../../components/loading'; import Loading from '../../../components/loading';
import { Utils } from '../../../utils/utils'; import { Utils } from '../../../utils/utils';
@@ -23,7 +23,7 @@ class OrgStatisticUsers extends React.Component {
getActiviesFiles = (startTime, endTime, groupBy) => { getActiviesFiles = (startTime, endTime, groupBy) => {
let { filesData } = this.state; let { filesData } = this.state;
seafileAPI.orgAdminStatisticActiveUsers(orgID, startTime, endTime, groupBy).then((res) => { orgAdminAPI.orgAdminStatisticActiveUsers(orgID, startTime, endTime, groupBy).then((res) => {
let labels = []; let labels = [];
let count = []; let count = [];
let data = res.data; let data = res.data;

View File

@@ -1,6 +1,6 @@
import React, { Component, Fragment } from 'react'; import React, { Component, Fragment } from 'react';
import { Utils } from '../../../utils/utils'; import { Utils } from '../../../utils/utils';
import { seafileAPI } from '../../../utils/seafile-api'; import { orgAdminAPI } from '../../../utils/org-admin-api';
import { gettext, mediaUrl, logoPath, orgID, orgEnableAdminCustomLogo, orgEnableAdminCustomName, enableMultiADFS } from '../../../utils/constants'; import { gettext, mediaUrl, logoPath, orgID, orgEnableAdminCustomLogo, orgEnableAdminCustomName, enableMultiADFS } from '../../../utils/constants';
import Loading from '../../../components/loading'; import Loading from '../../../components/loading';
import toaster from '../../../components/toast'; import toaster from '../../../components/toast';
@@ -32,7 +32,7 @@ class OrgWebSettings extends Component {
} }
componentDidMount() { componentDidMount() {
seafileAPI.orgAdminGetOrgInfo().then((res) => { orgAdminAPI.orgAdminGetOrgInfo().then((res) => {
this.setState({ this.setState({
loading: false, loading: false,
config_dict: res.data, config_dict: res.data,
@@ -50,7 +50,7 @@ class OrgWebSettings extends Component {
} }
updateName = (key, newOrgName) => { updateName = (key, newOrgName) => {
seafileAPI.orgAdminUpdateName(orgID, newOrgName).then((res) => { orgAdminAPI.orgAdminUpdateName(orgID, newOrgName).then((res) => {
this.setState({ this.setState({
config_dict: res.data config_dict: res.data
}); });
@@ -62,7 +62,7 @@ class OrgWebSettings extends Component {
}; };
updateLogo = (file) => { updateLogo = (file) => {
seafileAPI.orgAdminUpdateLogo(orgID, file).then((res) => { orgAdminAPI.orgAdminUpdateLogo(orgID, file).then((res) => {
this.setState({ this.setState({
logoPath: res.data.logo_path logoPath: res.data.logo_path
}); });
@@ -74,7 +74,7 @@ class OrgWebSettings extends Component {
}; };
orgSaveSetting = (key, value) => { orgSaveSetting = (key, value) => {
seafileAPI.orgAdminSetSysSettingInfo(orgID, key, value).then((res) => { orgAdminAPI.orgAdminSetSysSettingInfo(orgID, key, value).then((res) => {
toaster.success(gettext('System settings updated')); toaster.success(gettext('System settings updated'));
}).catch((error) => { }).catch((error) => {
let errMessage = Utils.getErrorMsg(error); let errMessage = Utils.getErrorMsg(error);

View File

@@ -1,5 +1,6 @@
import axios from 'axios'; import axios from 'axios';
import cookie from 'react-cookies'; import cookie from 'react-cookies';
import FormData from 'form-data';
import { siteRoot } from './constants'; import { siteRoot } from './constants';
class OrgAdminAPI { class OrgAdminAPI {
@@ -8,7 +9,7 @@ class OrgAdminAPI {
this.server = server; this.server = server;
this.username = username; this.username = username;
this.password = password; this.password = password;
this.token = token; this.token = token; // none
if (this.token && this.server) { if (this.token && this.server) {
this.req = axios.create({ this.req = axios.create({
baseURL: this.server, baseURL: this.server,
@@ -44,6 +45,478 @@ class OrgAdminAPI {
} }
} }
orgAdminGetOrgInfo() {
const url = this.server + '/api/v2.1/org/admin/info/';
return this.req.get(url);
}
orgAdminGetSysSettingInfo(orgID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/web-settings/';
return this.req.get(url);
}
orgAdminSetSysSettingInfo(orgID, key, value) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/web-settings/';
let formData = new FormData();
formData.append(key, value);
return this.req.put(url, formData);
}
orgAdminUpdateName(orgID, orgName) {
const url = this.server + '/api/v2.1/org/admin/info/';
let form = new FormData();
form.append('org_name', orgName);
return this.req.put(url, form);
}
orgAdminSetOrgUserDefaultQuota(orgID, quota) {
const url = this.server + '/api/v2.1/org/admin/info/';
let form = new FormData();
form.append('user_default_quota', quota);
return this.req.put(url, form);
}
orgAdminUpdateLogo(orgID, file) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/logo/';
let form = new FormData();
form.append('file', file);
return this._sendPostRequest(url, form);
}
orgAdminGetSamlConfig(orgID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/saml-config/';
return this.req.get(url);
}
orgAdminUpdateSamlConfig(orgID, metadataUrl, domain, idpCertificate) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/saml-config/';
let formData = new FormData();
if (metadataUrl) {
formData.append('metadata_url', metadataUrl);
}
if (domain) {
formData.append('domain', domain);
}
if (idpCertificate) {
formData.append('idp_certificate', idpCertificate);
}
return this.req.put(url, formData);
}
orgAdminVerifyDomain(orgID, domain) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/verify-domain/';
let data = {
domain: domain
};
return this.req.put(url, data);
}
orgAdminStatisticFiles(orgID, startTime, endTime, groupBy) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/statistics/file-operations/';
let params = {
start: startTime,
end: endTime,
group_by: groupBy
};
return this.req.get(url, { params: params });
}
orgAdminStatisticStorages(orgID, startTime, endTime, groupBy) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/statistics/total-storage/';
let params = {
start: startTime,
end: endTime,
group_by: groupBy
};
return this.req.get(url, { params: params });
}
orgAdminStatisticActiveUsers(orgID, startTime, endTime, groupBy) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/statistics/active-users/';
let params = {
start: startTime,
end: endTime,
group_by: groupBy
};
return this.req.get(url, { params: params });
}
orgAdminStatisticSystemTraffic(orgID, startTime, endTime, groupBy) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/statistics/system-traffic/';
let params = {
start: startTime,
end: endTime,
group_by: groupBy
};
return this.req.get(url, { params: params });
}
orgAdminListUserTraffic(orgID, month, page, perPage, orderBy) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/statistics/user-traffic/';
let params = {
month: month,
page: page,
per_page: perPage,
order_by: orderBy
};
return this.req.get(url, { params: params });
}
orgAdminListDevices(orgID, platform, page, per_page) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/devices/';
let params = {
platform: platform,
page: page,
per_page: per_page
};
return this.req.get(url, { params: params });
}
orgAdminUnlinkDevice(orgID, platform, deviceID, user, wipeDevice) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/devices/';
let params = {
wipe_device: wipeDevice ? 'true' : 'false',
platform: platform,
device_id: deviceID,
user: user
};
return this.req.delete(url, { data: params });
}
orgAdminListDevicesErrors(orgID, page, per_page) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/devices-errors/';
let params = {
page: page,
per_page: per_page
};
return this.req.get(url, { params: params });
}
orgAdminClearDeviceErrors(orgID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/devices-errors/';
return this.req.delete(url);
}
orgAdminListOrgUsers(orgID, isStaff, page, sortBy, sortOrder) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/users/';
let params = {
is_staff: isStaff,
page: page
};
if (sortBy) {
params.order_by = sortBy;
params.direction = sortOrder;
}
return this.req.get(url, { params: params });
}
orgAdminSearchUser(orgID, query) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/search-user/';
let params = {
query: query,
};
return this.req.get(url, { params: params });
}
orgAdminGetOrgUserBesharedRepos(orgID, email) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/users/' + encodeURIComponent(email) + '/beshared-repos/';
return this.req.get(url);
}
orgAdminGetOrgUserOwnedRepos(orgID, email) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/users/' + encodeURIComponent(email) + '/repos/';
return this.req.get(url);
}
orgAdminGetOrgUserInfo(orgID, email) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/users/' + encodeURIComponent(email) + '/';
return this.req.get(url);
}
orgAdminSetOrgUserName(orgID, email, name) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/users/' + encodeURIComponent(email) + '/';
const data = {
name: name
};
return this.req.put(url, data);
}
orgAdminSetOrgUserContactEmail(orgID, email, contactEmail) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/users/' + encodeURIComponent(email) + '/';
const data = {
contact_email: contactEmail
};
return this.req.put(url, data);
}
orgAdminSetOrgUserQuota(orgID, email, quota) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/users/' + encodeURIComponent(email) + '/';
const data = {
quota_total: quota
};
return this.req.put(url, data);
}
orgAdminDeleteOrgUser(orgID, email) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/users/' + encodeURIComponent(email) + '/';
return this.req.delete(url);
}
orgAdminResetOrgUserPassword(orgID, email) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/users/' + encodeURIComponent(email) + '/set-password/';
return this.req.put(url);
}
orgAdminChangeOrgUserStatus(orgID, email, isActive) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/users/' + encodeURIComponent(email) + '/';
let form = new FormData();
form.append('is_active', isActive);
return this.req.put(url, form);
}
orgAdminAddOrgUser(orgID, email, name, password) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/users/';
let form = new FormData();
form.append('email', email);
form.append('name', name);
form.append('password', password);
return this._sendPostRequest(url, form);
}
orgAdminImportUsersViaFile(orgID, file) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/import-users/';
let formData = new FormData();
formData.append('file', file);
return this._sendPostRequest(url, formData);
}
orgAdminInviteOrgUsers(orgID, email) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/invite-users/';
let form = new FormData();
if (Array.isArray(email)) {
email.forEach(item => {
form.append('email', item);
});
} else {
form.append('email', email);
}
return this._sendPostRequest(url, form);
}
orgAdminSetOrgAdmin(orgID, email, isStaff) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/users/' + encodeURIComponent(email) + '/';
let form = new FormData();
form.append('is_staff', isStaff);
return this.req.put(url, form);
}
orgAdminListOrgGroups(orgID, page) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/groups/?page=' + page;
return this.req.get(url);
}
orgAdminSearchGroup(orgID, query) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/search-group/';
let params = {
query: query,
};
return this.req.get(url, { params: params });
}
orgAdminGetGroup(orgID, groupID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/groups/' + groupID + '/';
return this.req.get(url);
}
orgAdminDeleteOrgGroup(orgID, groupID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/groups/' + groupID + '/';
return this.req.delete(url);
}
orgAdminListDepartments(orgID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/departments/';
return this.req.get(url);
}
orgAdminListOrgRepos(orgID, page, perPage, orderBy) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/repos/';
let params = {
page: page,
per_page: perPage
};
if (orderBy) {
params.order_by = orderBy;
}
return this.req.get(url, { params: params });
}
orgAdminDeleteOrgRepo(orgID, repoID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/repos/' + repoID + '/';
return this.req.delete(url);
}
orgAdminListTrashRepos(orgID, page, perPage) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/trash-libraries/';
let params = {
page: page,
per_page: perPage
};
return this.req.get(url, {
params: params
});
}
orgAdminDeleteTrashRepo(orgID, repoID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/trash-libraries/' + repoID + '/';
return this.req.delete(url);
}
orgAdminRestoreTrashRepo(orgID, repoID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/trash-libraries/' + repoID + '/';
return this.req.put(url);
}
orgAdminCleanTrashRepo(orgID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/trash-libraries/';
return this.req.delete(url);
}
// org links
orgAdminListOrgLinks(page) {
const url = this.server + '/api/v2.1/org/admin/links/?page=' + page;
return this.req.get(url);
}
orgAdminDeleteOrgLink(token) {
const url = this.server + '/api/v2.1/org/admin/links/' + token + '/';
return this.req.delete(url);
}
// org depart group
orgAdminListDepartGroups(orgID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/address-book/groups/';
return this.req.get(url);
}
orgAdminListGroupInfo(orgID, groupID, showAncestors) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/address-book/groups/' + groupID + '/?return_ancestors=' + showAncestors;
return this.req.get(url);
}
orgAdminAddDepartGroup(orgID, parentGroup, groupName, groupOwner, groupStaff) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/address-book/groups/';
let form = new FormData();
form.append('parent_group', parentGroup);
form.append('group_name', groupName);
if (groupOwner) {
form.append('group_owner', groupOwner);
}
if (groupStaff) {
form.append('group_staff', groupStaff.join(','));
}
return this._sendPostRequest(url, form);
}
orgAdminUpdateDepartGroup(orgID, groupID, groupName) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/address-book/groups/' + groupID + '/';
let form = new FormData();
form.append('group_name', groupName);
return this.req.put(url, form);
}
orgAdminDeleteDepartGroup(orgID, groupID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/address-book/groups/' + groupID + '/';
return this.req.delete(url);
}
orgAdminSetGroupQuota(orgID, groupID, quota) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/groups/' + groupID + '/';
let form = new FormData();
form.append('quota', quota);
return this.req.put(url, form);
}
orgAdminListGroupRepos(orgID, groupID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/groups/' + groupID + '/libraries/';
return this.req.get(url);
}
orgAdminAddDepartmentRepo(orgID, groupID, repoName) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/groups/' + groupID + '/group-owned-libraries/';
let form = new FormData();
form.append('repo_name', repoName);
return this._sendPostRequest(url, form);
}
orgAdminDeleteDepartmentRepo(orgID, groupID, repoID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/groups/' + groupID + '/group-owned-libraries/' + repoID + '/';
return this.req.delete(url);
}
orgAdminListGroupMembers(orgID, groupID) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/groups/' + groupID + '/members/';
return this.req.get(url);
}
orgAdminDeleteGroupMember(orgID, groupID, userEmail) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/groups/' + groupID + '/members/' + encodeURIComponent(userEmail) + '/';
return this.req.delete(url);
}
orgAdminAddGroupMember(orgID, groupID, userEmail) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/groups/' + groupID + '/members/';
let form = new FormData();
form.append('email', userEmail);
return this._sendPostRequest(url, form);
}
orgAdminSetGroupMemberRole(orgID, groupID, userEmail, isAdmin) {
const url = this.server + '/api/v2.1/org/' + orgID + '/admin/groups/' + groupID + '/members/' + encodeURIComponent(userEmail) + '/';
let form = new FormData();
form.append('is_admin', isAdmin);
return this.req.put(url, form);
}
// org admin logs
orgAdminListFileAudit(email, repoID, page) {
let url = this.server + '/api/v2.1/org/admin/logs/file-access/?page=' + page;
if (email) {
url = url + '&email=' + encodeURIComponent(email);
}
if (repoID) {
url = url + '&repo_id=' + repoID;
}
return this.req.get(url);
}
orgAdminListFileUpdate(email, repoID, page) {
let url = this.server + '/api/v2.1/org/admin/logs/file-update/?page=' + page;
if (email) {
url = url + '&email=' + encodeURIComponent(email);
}
if (repoID) {
url = url + '&repo_id=' + repoID;
}
return this.req.get(url);
}
orgAdminListPermAudit(email, repoID, page) {
let url = this.server + '/api/v2.1/org/admin/logs/repo-permission/?page=' + page;
if (email) {
url = url + '&email=' + encodeURIComponent(email);
}
if (repoID) {
url = url + '&repo_id=' + repoID;
}
return this.req.get(url);
}
orgAdminGetFileUpdateDetail(repoID, commitID) {
let url = this.server + '/ajax/repo/' + repoID + '/history/changes/?commit_id=' + commitID;
return this.req.get(url, { headers: { 'X-Requested-With': 'XMLHttpRequest' } });
}
orgAdminGroup2Department(orgID, groupID) { orgAdminGroup2Department(orgID, groupID) {
var url = this.server + '/api/v2.1/org/' + orgID + '/admin/groups/' + groupID + '/group-to-department/'; var url = this.server + '/api/v2.1/org/' + orgID + '/admin/groups/' + groupID + '/group-to-department/';
return this.req.post(url); return this.req.post(url);