-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
ContainerSASPermissions.ts
163 lines (151 loc) · 4.13 KB
/
ContainerSASPermissions.ts
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
/**
* This is a helper class to construct a string representing the permissions granted by a ServiceSAS to a container.
* Setting a value to true means that any SAS which uses these permissions will grant permissions for that operation.
* Once all the values are set, this should be serialized with toString and set as the permissions field on a
* {@link BlobSASSignatureValues} object. It is possible to construct the permissions string without this class, but
* the order of the permissions is particular and this class guarantees correctness.
*
* @export
* @class ContainerSASPermissions
*/
export class ContainerSASPermissions {
/**
* Creates an {@link ContainerSASPermissions} from the specified permissions string. This method will throw an
* Error if it encounters a character that does not correspond to a valid permission.
*
* @static
* @param {string} permissions
* @returns {ContainerSASPermissions}
* @memberof ContainerSASPermissions
*/
public static parse(permissions: string) {
const containerSASPermissions = new ContainerSASPermissions();
for (const char of permissions) {
switch (char) {
case "r":
containerSASPermissions.read = true;
break;
case "a":
containerSASPermissions.add = true;
break;
case "c":
containerSASPermissions.create = true;
break;
case "w":
containerSASPermissions.write = true;
break;
case "d":
containerSASPermissions.delete = true;
break;
case "l":
containerSASPermissions.list = true;
break;
case "t":
containerSASPermissions.tag = true;
break;
case "x":
containerSASPermissions.deleteVersion = true;
break;
default:
throw new RangeError(`Invalid permission ${char}`);
}
}
return containerSASPermissions;
}
/**
* Specifies Read access granted.
*
* @type {boolean}
* @memberof ContainerSASPermissions
*/
public read: boolean = false;
/**
* Specifies Add access granted.
*
* @type {boolean}
* @memberof ContainerSASPermissions
*/
public add: boolean = false;
/**
* Specifies Create access granted.
*
* @type {boolean}
* @memberof ContainerSASPermissions
*/
public create: boolean = false;
/**
* Specifies Write access granted.
*
* @type {boolean}
* @memberof ContainerSASPermissions
*/
public write: boolean = false;
/**
* Specifies Delete access granted.
*
* @type {boolean}
* @memberof ContainerSASPermissions
*/
public delete: boolean = false;
/**
* Specifies Delete version access granted.
*
* @type {boolean}
* @memberof ContainerSASPermissions
*/
public deleteVersion: boolean = false;
/**
* Specifies List access granted.
*
* @type {boolean}
* @memberof ContainerSASPermissions
*/
public list: boolean = false;
/**
* Specfies Tag access granted.
*
* @type {boolean}
* @memberof ContainerSASPermissions
*/
public tag: boolean = false;
/**
* Converts the given permissions to a string. Using this method will guarantee the permissions are in an
* order accepted by the service.
*
* The order of the characters should be as specified here to ensure correctness.
* @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas
*
* @returns {string}
* @memberof ContainerSASPermissions
*/
public toString(): string {
const permissions: string[] = [];
if (this.read) {
permissions.push("r");
}
if (this.add) {
permissions.push("a");
}
if (this.create) {
permissions.push("c");
}
if (this.write) {
permissions.push("w");
}
if (this.delete) {
permissions.push("d");
}
if (this.deleteVersion) {
permissions.push("x");
}
if (this.list) {
permissions.push("l");
}
if (this.tag) {
permissions.push("t");
}
return permissions.join("");
}
}