Skip to content

Commit 1743c47

Browse files
authored
Storage/sas improvement (Azure#12850)
* fix a bug: need expiresOn AND permission * parse sas permission from raw object * use vanilla instead of map for SASPermissionsLike * separate the SASPermissionsLike * me
1 parent a6e68b7 commit 1743c47

File tree

11 files changed

+470
-12
lines changed

11 files changed

+470
-12
lines changed

sdk/storage/storage-blob/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## 12.4.0-beta.2 (Unreleased)
44

5+
- Added a new `from(permissionLike)` function to `AccountSASPermissions`, `BlobSASPermissions` and `ContainerSASPermissions` for creating such a permission from a raw permission-like object. Addressed issue [9714](https://github.com/Azure/azure-sdk-for-js/issues/9714).
56

67
## 12.4.0-beta.1 (2020-12-09)
78

sdk/storage/storage-blob/recordings/node/shared_access_signature_sas_generation_nodejs_only/recording_sas_permission_parse_from_raw_object_should_work.js

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/storage/storage-blob/review/storage-blob.api.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export class AccountSASPermissions {
5050
delete: boolean;
5151
deleteVersion: boolean;
5252
filter: boolean;
53+
static from(permissionLike: AccountSASPermissionsLike): AccountSASPermissions;
5354
list: boolean;
5455
static parse(permissions: string): AccountSASPermissions;
5556
process: boolean;
@@ -60,6 +61,21 @@ export class AccountSASPermissions {
6061
write: boolean;
6162
}
6263

64+
// @public
65+
export interface AccountSASPermissionsLike {
66+
add?: boolean;
67+
create?: boolean;
68+
delete?: boolean;
69+
deleteVersion?: boolean;
70+
filter?: boolean;
71+
list?: boolean;
72+
process?: boolean;
73+
read?: boolean;
74+
tag?: boolean;
75+
update?: boolean;
76+
write?: boolean;
77+
}
78+
6379
// @public
6480
export class AccountSASResourceTypes {
6581
container: boolean;
@@ -1006,6 +1022,7 @@ export class BlobSASPermissions {
10061022
delete: boolean;
10071023
deleteVersion: boolean;
10081024
execute: boolean;
1025+
static from(permissionLike: BlobSASPermissionsLike): BlobSASPermissions;
10091026
move: boolean;
10101027
static parse(permissions: string): BlobSASPermissions;
10111028
read: boolean;
@@ -1014,6 +1031,19 @@ export class BlobSASPermissions {
10141031
write: boolean;
10151032
}
10161033

1034+
// @public
1035+
export interface BlobSASPermissionsLike {
1036+
add?: boolean;
1037+
create?: boolean;
1038+
delete?: boolean;
1039+
deleteVersion?: boolean;
1040+
execute?: boolean;
1041+
move?: boolean;
1042+
read?: boolean;
1043+
tag?: boolean;
1044+
write?: boolean;
1045+
}
1046+
10171047
// @public
10181048
export interface BlobSASSignatureValues {
10191049
blobName?: string;
@@ -1916,6 +1946,7 @@ export class ContainerSASPermissions {
19161946
delete: boolean;
19171947
deleteVersion: boolean;
19181948
execute: boolean;
1949+
static from(permissionLike: ContainerSASPermissionsLike): ContainerSASPermissions;
19191950
list: boolean;
19201951
move: boolean;
19211952
static parse(permissions: string): ContainerSASPermissions;
@@ -1925,6 +1956,20 @@ export class ContainerSASPermissions {
19251956
write: boolean;
19261957
}
19271958

1959+
// @public
1960+
export interface ContainerSASPermissionsLike {
1961+
add?: boolean;
1962+
create?: boolean;
1963+
delete?: boolean;
1964+
deleteVersion?: boolean;
1965+
execute?: boolean;
1966+
list?: boolean;
1967+
move?: boolean;
1968+
read?: boolean;
1969+
tag?: boolean;
1970+
write?: boolean;
1971+
}
1972+
19281973
// @public
19291974
export interface ContainerSetAccessPolicyHeaders {
19301975
clientRequestId?: string;

sdk/storage/storage-blob/src/sas/AccountSASPermissions.ts

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,53 @@ export class AccountSASPermissions {
6868
return accountSASPermissions;
6969
}
7070

71+
/**
72+
* Creates a {@link AccountSASPermissions} from a raw object which contains same keys as it
73+
* and boolean values for them.
74+
*
75+
* @static
76+
* @param {AccountSASPermissionsLike} permissionLike
77+
* @returns {AccountSASPermissions}
78+
* @memberof AccountSASPermissions
79+
*/
80+
public static from(permissionLike: AccountSASPermissionsLike): AccountSASPermissions {
81+
const accountSASPermissions = new AccountSASPermissions();
82+
if (permissionLike.read) {
83+
accountSASPermissions.read = true;
84+
}
85+
if (permissionLike.write) {
86+
accountSASPermissions.write = true;
87+
}
88+
if (permissionLike.delete) {
89+
accountSASPermissions.delete = true;
90+
}
91+
if (permissionLike.deleteVersion) {
92+
accountSASPermissions.deleteVersion = true;
93+
}
94+
if (permissionLike.filter) {
95+
accountSASPermissions.filter = true;
96+
}
97+
if (permissionLike.tag) {
98+
accountSASPermissions.tag = true;
99+
}
100+
if (permissionLike.list) {
101+
accountSASPermissions.list = true;
102+
}
103+
if (permissionLike.add) {
104+
accountSASPermissions.add = true;
105+
}
106+
if (permissionLike.create) {
107+
accountSASPermissions.create = true;
108+
}
109+
if (permissionLike.update) {
110+
accountSASPermissions.update = true;
111+
}
112+
if (permissionLike.process) {
113+
accountSASPermissions.process = true;
114+
}
115+
return accountSASPermissions;
116+
}
117+
71118
/**
72119
* Permission to read resources and list queues and tables granted.
73120
*
@@ -209,3 +256,97 @@ export class AccountSASPermissions {
209256
return permissions.join("");
210257
}
211258
}
259+
260+
/**
261+
* A type that looks like an account SAS permission.
262+
* Used in {@link AccountSASPermissions} to parse SAS permissions from raw objects.
263+
*/
264+
export interface AccountSASPermissionsLike {
265+
/**
266+
* Permission to read resources and list queues and tables granted.
267+
*
268+
* @type {boolean}
269+
* @memberof AccountSASPermissionsLike
270+
*/
271+
read?: boolean;
272+
273+
/**
274+
* Permission to write resources granted.
275+
*
276+
* @type {boolean}
277+
* @memberof AccountSASPermissionsLike
278+
*/
279+
write?: boolean;
280+
281+
/**
282+
* Permission to create blobs and files granted.
283+
*
284+
* @type {boolean}
285+
* @memberof AccountSASPermissionsLike
286+
*/
287+
delete?: boolean;
288+
289+
/**
290+
* Permission to delete versions granted.
291+
*
292+
* @type {boolean}
293+
* @memberof AccountSASPermissionsLike
294+
*/
295+
deleteVersion?: boolean;
296+
297+
/**
298+
* Permission to list blob containers, blobs, shares, directories, and files granted.
299+
*
300+
* @type {boolean}
301+
* @memberof AccountSASPermissionsLike
302+
*/
303+
list?: boolean;
304+
305+
/**
306+
* Permission to add messages, table entities, and append to blobs granted.
307+
*
308+
* @type {boolean}
309+
* @memberof AccountSASPermissionsLike
310+
*/
311+
add?: boolean;
312+
313+
/**
314+
* Permission to create blobs and files granted.
315+
*
316+
* @type {boolean}
317+
* @memberof AccountSASPermissionsLike
318+
*/
319+
create?: boolean;
320+
321+
/**
322+
* Permissions to update messages and table entities granted.
323+
*
324+
* @type {boolean}
325+
* @memberof AccountSASPermissionsLike
326+
*/
327+
update?: boolean;
328+
329+
/**
330+
* Permission to get and delete messages granted.
331+
*
332+
* @type {boolean}
333+
* @memberof AccountSASPermissionsLike
334+
*/
335+
process?: boolean;
336+
337+
/**
338+
* Specfies Tag access granted.
339+
*
340+
* @type {boolean}
341+
* @memberof AccountSASPermissionsLike
342+
*/
343+
tag?: boolean;
344+
345+
/**
346+
* Permission to filter blobs.
347+
*
348+
* @type {boolean}
349+
* @memberof AccountSASPermissionsLike
350+
*/
351+
filter?: boolean;
352+
}

sdk/storage/storage-blob/src/sas/BlobSASPermissions.ts

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,47 @@ export class BlobSASPermissions {
6363
return blobSASPermissions;
6464
}
6565

66+
/**
67+
* Creates a {@link BlobSASPermissions} from a raw object which contains same keys as it
68+
* and boolean values for them.
69+
*
70+
* @static
71+
* @param {BlobSASPermissionsLike} permissionLike
72+
* @returns {BlobSASPermissions}
73+
* @memberof BlobSASPermissions
74+
*/
75+
public static from(permissionLike: BlobSASPermissionsLike): BlobSASPermissions {
76+
const blobSASPermissions = new BlobSASPermissions();
77+
if (permissionLike.read) {
78+
blobSASPermissions.read = true;
79+
}
80+
if (permissionLike.add) {
81+
blobSASPermissions.add = true;
82+
}
83+
if (permissionLike.create) {
84+
blobSASPermissions.create = true;
85+
}
86+
if (permissionLike.write) {
87+
blobSASPermissions.write = true;
88+
}
89+
if (permissionLike.delete) {
90+
blobSASPermissions.delete = true;
91+
}
92+
if (permissionLike.deleteVersion) {
93+
blobSASPermissions.deleteVersion = true;
94+
}
95+
if (permissionLike.tag) {
96+
blobSASPermissions.tag = true;
97+
}
98+
if (permissionLike.move) {
99+
blobSASPermissions.move = true;
100+
}
101+
if (permissionLike.execute) {
102+
blobSASPermissions.execute = true;
103+
}
104+
return blobSASPermissions;
105+
}
106+
66107
/**
67108
* Specifies Read access granted.
68109
*
@@ -174,3 +215,81 @@ export class BlobSASPermissions {
174215
return permissions.join("");
175216
}
176217
}
218+
219+
/**
220+
* A type that looks like a Blob SAS permission.
221+
* Used in {@link BlobSASPermissions} to parse SAS permissions from raw objects.
222+
*/
223+
export interface BlobSASPermissionsLike {
224+
/**
225+
* Specifies Read access granted.
226+
*
227+
* @type {boolean}
228+
* @memberof BlobSASPermissionsLike
229+
*/
230+
read?: boolean;
231+
232+
/**
233+
* Specifies Add access granted.
234+
*
235+
* @type {boolean}
236+
* @memberof BlobSASPermissionsLike
237+
*/
238+
add?: boolean;
239+
240+
/**
241+
* Specifies Create access granted.
242+
*
243+
* @type {boolean}
244+
* @memberof BlobSASPermissionsLike
245+
*/
246+
create?: boolean;
247+
248+
/**
249+
* Specifies Write access granted.
250+
*
251+
* @type {boolean}
252+
* @memberof BlobSASPermissionsLike
253+
*/
254+
write?: boolean;
255+
256+
/**
257+
* Specifies Delete access granted.
258+
*
259+
* @type {boolean}
260+
* @memberof BlobSASPermissionsLike
261+
*/
262+
delete?: boolean;
263+
264+
/**
265+
* Specifies Delete version access granted.
266+
*
267+
* @type {boolean}
268+
* @memberof BlobSASPermissionsLike
269+
*/
270+
deleteVersion?: boolean;
271+
272+
/**
273+
* Specfies Tag access granted.
274+
*
275+
* @type {boolean}
276+
* @memberof BlobSASPermissionsLike
277+
*/
278+
tag?: boolean;
279+
280+
/**
281+
* Specifies Move access granted.
282+
*
283+
* @type {boolean}
284+
* @memberof BlobSASPermissionsLike
285+
*/
286+
move?: boolean;
287+
288+
/**
289+
* Specifies Execute access granted.
290+
*
291+
* @type {boolean}
292+
* @memberof BlobSASPermissionsLike
293+
*/
294+
execute?: boolean;
295+
}

0 commit comments

Comments
 (0)