1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
import {OCSResult} from "NC";
import Thenable = JQuery.Thenable;
import {FolderGroupsProps} from "./FolderGroups";
export interface Group {
id: string;
displayname: string;
}
export interface OCSUser {
uid: string;
displayname: string;
}
export interface OCSGroup {
gid: string;
displayname: string;
}
export interface ManageRuleProps {
type: string;
id: string;
displayname: string;
}
export interface Folder {
id: number;
mount_point: string;
quota: number;
size: number;
groups: { [group: string]: number };
acl: boolean;
manage: ManageRuleProps[];
}
export class Api {
getUrl(endpoint: string): string {
return OC.generateUrl(`apps/groupfolders/${endpoint}`);
}
listFolders(): Thenable<Folder[]> {
return $.getJSON(this.getUrl('folders'))
.then((data: OCSResult<Folder[]>) => Object.keys(data.ocs.data).map(id => data.ocs.data[id]));
}
listGroups(): Thenable<Group[]> {
return $.getJSON(this.getUrl('delegation/groups'))
.then((data: OCSResult<Group[]>) => data.ocs.data);
}
createFolder(mountPoint: string): Thenable<number> {
return $.post(this.getUrl('folders'), {
mountpoint: mountPoint
}, null, 'json').then((data: OCSResult<{ id: number; }>) => data.ocs.data.id);
}
deleteFolder(id: number): Thenable<void> {
return $.ajax({
url: this.getUrl(`folders/${id}`),
type: 'DELETE'
});
}
addGroup(folderId: number, group: string): Thenable<void> {
return $.post(this.getUrl(`folders/${folderId}/groups`), {
group
});
}
removeGroup(folderId: number, group: string): Thenable<void> {
return $.ajax({
url: this.getUrl(`folders/${folderId}/groups/${group}`),
type: 'DELETE'
});
}
setPermissions(folderId: number, group: string, permissions: number): Thenable<void> {
return $.post(this.getUrl(`folders/${folderId}/groups/${group}`), {
permissions
});
}
setManageACL(folderId: number, type: string, id: string, manageACL: boolean): Thenable<void> {
return $.post(this.getUrl(`folders/${folderId}/manageACL`), {
mappingType: type,
mappingId: id,
manageAcl: manageACL ? 1 : 0
});
}
setQuota(folderId: number, quota: number): Thenable<void> {
return $.post(this.getUrl(`folders/${folderId}/quota`), {
quota
});
}
setACL(folderId: number, acl: boolean): Thenable<void> {
return $.post(this.getUrl(`folders/${folderId}/acl`), {
acl: acl ? 1 : 0
});
}
renameFolder(folderId: number, mountpoint: string): Thenable<void> {
return $.post(this.getUrl(`folders/${folderId}/mountpoint`), {
mountpoint
});
}
aclMappingSearch(folderId: number, search: string): Thenable<{groups: OCSGroup[], users: OCSUser[]}> {
return $.getJSON(this.getUrl(`folders/${folderId}/search?format=json&search=${search}`))
.then((data: OCSResult<{ groups: OCSGroup[]; users: OCSUser[]; }>) => {
return {
groups: Object.values(data.ocs.data.groups).map((item) => {
return {
type: 'group',
id: item.gid,
displayname: item.displayname
}
}),
users: Object.values(data.ocs.data.users).map((item) => {
return {
type: 'user',
id: item.uid,
displayname: item.displayname
}
})
}
});
}
}
|