@@ -69,7 +69,10 @@ function getPackageListAsString(packages: string[]): string {
69
69
return result ;
70
70
}
71
71
72
- async function configureFirstTimePermissions ( extensionId : string , pm : PackageManagerPermissions ) {
72
+ async function configureFirstTimePermissions (
73
+ extensionId : string ,
74
+ pm : PackageManagerPermissions ,
75
+ ) : Promise < PermissionType > {
73
76
const response = await showInformationMessage (
74
77
l10n . t ( 'The {0} extension wants to make changes to packages in your Python environments' , extensionId ) ,
75
78
{ modal : true } ,
@@ -83,66 +86,55 @@ async function configureFirstTimePermissions(extensionId: string, pm: PackageMan
83
86
if ( response ?. title === PermissionsCommon . confirmEachTime ) {
84
87
await pm . setPermissions ( extensionId , 'Ask' ) ;
85
88
traceLog ( 'Package management permissions set to "ask" for extension: ' , extensionId ) ;
86
- return true ;
89
+ return 'Ask' ;
87
90
} else if ( response ?. title === PermissionsCommon . allow ) {
88
91
await pm . setPermissions ( extensionId , 'Allow' ) ;
89
92
traceLog ( 'Package management permissions set to "allow" for extension: ' , extensionId ) ;
90
- return true ;
93
+ return 'Allow' ;
91
94
} else if ( response ?. title === PermissionsCommon . deny ) {
92
95
await pm . setPermissions ( extensionId , 'Deny' ) ;
93
96
traceLog ( 'Package management permissions set to "deny" for extension: ' , extensionId ) ;
94
- return false ;
97
+ return 'Deny' ;
95
98
} else {
96
- traceLog ( 'Package management permissions not changed for extension: ' , extensionId ) ;
97
- return false ;
99
+ traceLog ( 'Package management permissions not set (default: ask) for extension: ' , extensionId ) ;
100
+ return 'Ask' ;
98
101
}
99
102
}
100
103
101
- export async function checkPackageManagementPermissions (
102
- pm : PackageManagerPermissions ,
103
- mode : 'install' | 'uninstall' | 'changes' ,
104
- packages ?: string [ ] ,
105
- ) : Promise < boolean > {
106
- const extensionId = getCallingExtension ( ) ;
107
-
108
- const currentPermission = await pm . getPermissions ( extensionId ) ;
109
- if ( currentPermission === 'Allow' ) {
110
- return true ;
111
- } else if ( currentPermission === 'Deny' ) {
112
- traceLog ( `Package management permissions denied for extension: ${ extensionId } ` ) ;
113
- setImmediate ( async ( ) => {
114
- let message = l10n . t (
115
- 'The extension `{0}` is not permitted to install packages into your Python environment.' ,
116
- extensionId ,
117
- ) ;
118
- if ( mode === 'uninstall' ) {
119
- message = l10n . t (
120
- 'The extension `{0}` is not permitted to uninstall packages from your Python environment.' ,
121
- extensionId ,
122
- ) ;
123
- } else if ( mode === 'changes' ) {
124
- message = l10n . t (
125
- 'The extension `{0}` is not permitted to make changes to your Python environment.' ,
126
- extensionId ,
127
- ) ;
128
- }
129
- const response = await showWarningMessage ( message , PermissionsCommon . updatePermissions ) ;
130
- if ( response === PermissionsCommon . updatePermissions ) {
131
- handlePermissionsCommand ( pm , extensionId ) ;
132
- }
133
- } ) ;
134
- return false ;
135
- } else if ( currentPermission === undefined ) {
136
- return await configureFirstTimePermissions ( extensionId , pm ) ;
104
+ async function notifyPermissionsDenied ( pm : PackageManagerPermissions , extensionId : string , mode : string ) {
105
+ let message = l10n . t (
106
+ 'The extension `{0}` is not permitted to install packages into your Python environment.' ,
107
+ extensionId ,
108
+ ) ;
109
+ if ( mode === 'uninstall' ) {
110
+ message = l10n . t (
111
+ 'The extension `{0}` is not permitted to uninstall packages from your Python environment.' ,
112
+ extensionId ,
113
+ ) ;
114
+ } else if ( mode === 'changes' ) {
115
+ message = l10n . t (
116
+ 'The extension `{0}` is not permitted to make changes to your Python environment.' ,
117
+ extensionId ,
118
+ ) ;
119
+ }
120
+ const response = await showWarningMessage ( message , PermissionsCommon . updatePermissions ) ;
121
+ if ( response === PermissionsCommon . updatePermissions ) {
122
+ handlePermissionsCommand ( pm , extensionId ) ;
137
123
}
124
+ }
138
125
139
- // Below handles Permission level is 'Ask'
126
+ async function handleAskForPermissions ( extensionId : string , mode : string , packages ?: string [ ] ) {
140
127
let message = l10n . t ( 'The extension `{0}` wants to install packages into your Python environment.' , extensionId ) ;
141
128
if ( mode === 'uninstall' ) {
142
129
message = l10n . t ( 'The extension `{0}` wants to uninstall packages from your Python environment.' , extensionId ) ;
143
130
} else if ( mode === 'changes' ) {
144
131
message = l10n . t ( 'The extension `{0}` wants to make changes to your Python environment.' , extensionId ) ;
145
132
}
133
+ traceLog (
134
+ `Asking for package management permissions for extension ${ extensionId } to ${ mode } : ${
135
+ packages ?? 'no packages listed'
136
+ } `,
137
+ ) ;
146
138
147
139
const response = await showInformationMessage (
148
140
message ,
@@ -154,13 +146,39 @@ export async function checkPackageManagementPermissions(
154
146
{ title : PermissionsCommon . deny , isCloseAffordance : true } ,
155
147
) ;
156
148
if ( response ?. title === PermissionsCommon . allow ) {
157
- traceLog ( `Package management permissions granted for extension: ${ extensionId } ` ) ;
149
+ traceLog ( `Package management permissions granted for extension this time : ${ extensionId } ` ) ;
158
150
return true ;
159
151
}
160
- traceLog ( `Package management permissions denied for extension: ${ extensionId } ` ) ;
152
+ traceLog ( `Package management permissions denied for extension this time : ${ extensionId } ` ) ;
161
153
return false ;
162
154
}
163
155
156
+ export async function checkPackageManagementPermissions (
157
+ pm : PackageManagerPermissions ,
158
+ mode : 'install' | 'uninstall' | 'changes' ,
159
+ packages ?: string [ ] ,
160
+ ) : Promise < boolean > {
161
+ const extensionId = getCallingExtension ( ) ;
162
+
163
+ let currentPermission = await pm . getPermissions ( extensionId ) ;
164
+ if ( currentPermission === undefined ) {
165
+ currentPermission = await configureFirstTimePermissions ( extensionId , pm ) ;
166
+ }
167
+
168
+ if ( currentPermission === 'Allow' ) {
169
+ return true ;
170
+ } else if ( currentPermission === 'Deny' ) {
171
+ traceLog ( `Package management permissions denied for extension: ${ extensionId } ` ) ;
172
+ setImmediate ( async ( ) => {
173
+ await notifyPermissionsDenied ( pm , extensionId , mode ) ;
174
+ } ) ;
175
+ return false ;
176
+ }
177
+
178
+ const result = await handleAskForPermissions ( extensionId , mode , packages ) ;
179
+ return result ;
180
+ }
181
+
164
182
export async function handlePermissionsCommand ( pm : PermissionsManager < PermissionType > , extensionId ?: string ) {
165
183
extensionId = extensionId ?? ( await pickExtension ( ) ) ;
166
184
if ( ! extensionId ) {
0 commit comments