11import { l10n , SecretStorage } from 'vscode' ;
2- import { pickExtensionForPermissions } from './pickers' ;
2+ import { pickExtension } from './pickers' ;
33import { showInformationMessage , showWarningMessage } from '../../common/window.apis' ;
44import { PermissionsCommon } from '../../common/localize' ;
55import { traceLog } from '../../common/logging' ;
6- import { allExternalExtensions } from '../../common/extension.apis' ;
6+ import { allExtensions } from '../../common/extension.apis' ;
77import { getCallingExtension } from '../../common/utils/frameUtils' ;
88
99type PermissionType = 'Ask' | 'Allow' | 'Deny' ;
@@ -42,7 +42,7 @@ export class PackageManagerPermissionsImpl implements PackageManagerPermissions
4242 }
4343
4444 async resetPermissions ( ) : Promise < void > {
45- const ids = allExternalExtensions ( ) . map ( ( e ) => `python-envs.permissions.packageManagement.${ e . id } ` ) ;
45+ const ids = allExtensions ( ) . map ( ( e ) => `python-envs.permissions.packageManagement.${ e . id } ` ) ;
4646 await Promise . all ( ids . map ( ( id ) => this . secretStore . delete ( id ) ) ) ;
4747 traceLog ( 'All package management permissions have been reset.' ) ;
4848 }
@@ -69,72 +69,75 @@ function getPackageListAsString(packages: string[]): string {
6969 return result ;
7070}
7171
72- async function configureFirstTimePermissions (
73- extensionId : string ,
74- pm : PackageManagerPermissions ,
75- ) : Promise < PermissionType > {
72+ async function configureFirstTimePermissions ( extensionId : string , pm : PackageManagerPermissions ) {
7673 const response = await showInformationMessage (
77- l10n . t ( 'The {0} extension wants to make changes to packages in your Python environments' , extensionId ) ,
74+ l10n . t (
75+ 'The extension {0} wants to install, upgrade, or uninstall packages from your Python environments' ,
76+ extensionId ,
77+ ) ,
7878 { modal : true } ,
7979 {
80- title : PermissionsCommon . confirmEachTime ,
80+ title : PermissionsCommon . ask ,
8181 isCloseAffordance : true ,
8282 } ,
8383 { title : PermissionsCommon . allow } ,
8484 { title : PermissionsCommon . deny } ,
8585 ) ;
86- if ( response ?. title === PermissionsCommon . confirmEachTime ) {
86+ if ( response ?. title === PermissionsCommon . ask ) {
8787 await pm . setPermissions ( extensionId , 'Ask' ) ;
8888 traceLog ( 'Package management permissions set to "ask" for extension: ' , extensionId ) ;
89- return 'Ask' ;
89+ return true ;
9090 } else if ( response ?. title === PermissionsCommon . allow ) {
9191 await pm . setPermissions ( extensionId , 'Allow' ) ;
9292 traceLog ( 'Package management permissions set to "allow" for extension: ' , extensionId ) ;
93- return 'Allow' ;
93+ return true ;
9494 } else if ( response ?. title === PermissionsCommon . deny ) {
9595 await pm . setPermissions ( extensionId , 'Deny' ) ;
9696 traceLog ( 'Package management permissions set to "deny" for extension: ' , extensionId ) ;
97- return 'Deny' ;
97+ return false ;
9898 } else {
99- traceLog ( 'Package management permissions not set (default: ask) for extension: ' , extensionId ) ;
100- return 'Ask' ;
99+ traceLog ( 'Package management permissions not changed for extension: ' , extensionId ) ;
100+ return false ;
101101 }
102102}
103103
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 ) ;
104+ export async function checkPackageManagementPermissions (
105+ pm : PackageManagerPermissions ,
106+ mode : 'install' | 'uninstall' | 'changes' ,
107+ packages ?: string [ ] ,
108+ ) : Promise < boolean > {
109+ const extensionId = getCallingExtension ( ) ;
110+
111+ const currentPermission = await pm . getPermissions ( extensionId ) ;
112+ if ( currentPermission === 'Allow' ) {
113+ return true ;
114+ } else if ( currentPermission === 'Deny' ) {
115+ traceLog ( `Package management permissions denied for extension: ${ extensionId } ` ) ;
116+ setImmediate ( async ( ) => {
117+ const response = await showWarningMessage (
118+ l10n . t (
119+ 'The extension `{0}` is not allowed to {1} packages into your Python environment.' ,
120+ extensionId ,
121+ mode ,
122+ ) ,
123+ PermissionsCommon . setPermissions ,
124+ ) ;
125+ if ( response === PermissionsCommon . setPermissions ) {
126+ handlePermissionsCommand ( pm , extensionId ) ;
127+ }
128+ } ) ;
129+ return false ;
130+ } else if ( currentPermission === undefined ) {
131+ return await configureFirstTimePermissions ( extensionId , pm ) ;
123132 }
124- }
125133
126- async function handleAskForPermissions ( extensionId : string , mode : string , packages ?: string [ ] ) {
134+ // Below handles Permission level is 'Ask'
127135 let message = l10n . t ( 'The extension `{0}` wants to install packages into your Python environment.' , extensionId ) ;
128136 if ( mode === 'uninstall' ) {
129137 message = l10n . t ( 'The extension `{0}` wants to uninstall packages from your Python environment.' , extensionId ) ;
130138 } else if ( mode === 'changes' ) {
131139 message = l10n . t ( 'The extension `{0}` wants to make changes to your Python environment.' , extensionId ) ;
132140 }
133- traceLog (
134- `Asking for package management permissions for extension ${ extensionId } to ${ mode } : ${
135- packages ?? 'no packages listed'
136- } `,
137- ) ;
138141
139142 const response = await showInformationMessage (
140143 message ,
@@ -146,41 +149,15 @@ async function handleAskForPermissions(extensionId: string, mode: string, packag
146149 { title : PermissionsCommon . deny , isCloseAffordance : true } ,
147150 ) ;
148151 if ( response ?. title === PermissionsCommon . allow ) {
149- traceLog ( `Package management permissions granted for extension this time : ${ extensionId } ` ) ;
152+ traceLog ( `Package management permissions granted for extension: ${ extensionId } ` ) ;
150153 return true ;
151154 }
152- traceLog ( `Package management permissions denied for extension this time : ${ extensionId } ` ) ;
155+ traceLog ( `Package management permissions denied for extension: ${ extensionId } ` ) ;
153156 return false ;
154157}
155158
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-
182159export async function handlePermissionsCommand ( pm : PermissionsManager < PermissionType > , extensionId ?: string ) {
183- extensionId = extensionId ?? ( await pickExtensionForPermissions ( ) ) ;
160+ extensionId = extensionId ?? ( await pickExtension ( ) ) ;
184161 if ( ! extensionId ) {
185162 return ;
186163 }
@@ -189,19 +166,19 @@ export async function handlePermissionsCommand(pm: PermissionsManager<Permission
189166
190167 const response = await showInformationMessage (
191168 l10n . t (
192- 'Set permissions for the {0} extension to make changes to packages in your Python environments' ,
169+ 'Set permissions for the extension {0} to install, upgrade, or uninstall packages from your Python environments' ,
193170 extensionId ,
194171 ) ,
195172 {
196173 modal : true ,
197174 detail : currentPermission ? l10n . t ( 'Current permission: {0}' , currentPermission ) : undefined ,
198175 } ,
199- PermissionsCommon . confirmEachTime ,
176+ PermissionsCommon . ask ,
200177 PermissionsCommon . allow ,
201178 PermissionsCommon . deny ,
202179 ) ;
203180
204- if ( response === PermissionsCommon . confirmEachTime ) {
181+ if ( response === PermissionsCommon . ask ) {
205182 await pm . setPermissions ( extensionId , 'Ask' ) ;
206183 traceLog ( 'Package management permissions set to "ask" for extension: ' , extensionId ) ;
207184 } else if ( response === PermissionsCommon . allow ) {
0 commit comments