Skip to content

Commit f24dead

Browse files
committed
chore: some refactoring
1 parent 1a2a6dd commit f24dead

File tree

1 file changed

+63
-45
lines changed

1 file changed

+63
-45
lines changed

src/features/permissions/packageManagerPermissions.ts

+63-45
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,10 @@ function getPackageListAsString(packages: string[]): string {
6969
return result;
7070
}
7171

72-
async function configureFirstTimePermissions(extensionId: string, pm: PackageManagerPermissions) {
72+
async function configureFirstTimePermissions(
73+
extensionId: string,
74+
pm: PackageManagerPermissions,
75+
): Promise<PermissionType> {
7376
const response = await showInformationMessage(
7477
l10n.t('The {0} extension wants to make changes to packages in your Python environments', extensionId),
7578
{ modal: true },
@@ -83,66 +86,55 @@ async function configureFirstTimePermissions(extensionId: string, pm: PackageMan
8386
if (response?.title === PermissionsCommon.confirmEachTime) {
8487
await pm.setPermissions(extensionId, 'Ask');
8588
traceLog('Package management permissions set to "ask" for extension: ', extensionId);
86-
return true;
89+
return 'Ask';
8790
} else if (response?.title === PermissionsCommon.allow) {
8891
await pm.setPermissions(extensionId, 'Allow');
8992
traceLog('Package management permissions set to "allow" for extension: ', extensionId);
90-
return true;
93+
return 'Allow';
9194
} else if (response?.title === PermissionsCommon.deny) {
9295
await pm.setPermissions(extensionId, 'Deny');
9396
traceLog('Package management permissions set to "deny" for extension: ', extensionId);
94-
return false;
97+
return 'Deny';
9598
} 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';
98101
}
99102
}
100103

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);
137123
}
124+
}
138125

139-
// Below handles Permission level is 'Ask'
126+
async function handleAskForPermissions(extensionId: string, mode: string, packages?: string[]) {
140127
let message = l10n.t('The extension `{0}` wants to install packages into your Python environment.', extensionId);
141128
if (mode === 'uninstall') {
142129
message = l10n.t('The extension `{0}` wants to uninstall packages from your Python environment.', extensionId);
143130
} else if (mode === 'changes') {
144131
message = l10n.t('The extension `{0}` wants to make changes to your Python environment.', extensionId);
145132
}
133+
traceLog(
134+
`Asking for package management permissions for extension ${extensionId} to ${mode}: ${
135+
packages ?? 'no packages listed'
136+
}`,
137+
);
146138

147139
const response = await showInformationMessage(
148140
message,
@@ -154,13 +146,39 @@ export async function checkPackageManagementPermissions(
154146
{ title: PermissionsCommon.deny, isCloseAffordance: true },
155147
);
156148
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}`);
158150
return true;
159151
}
160-
traceLog(`Package management permissions denied for extension: ${extensionId}`);
152+
traceLog(`Package management permissions denied for extension this time: ${extensionId}`);
161153
return false;
162154
}
163155

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+
164182
export async function handlePermissionsCommand(pm: PermissionsManager<PermissionType>, extensionId?: string) {
165183
extensionId = extensionId ?? (await pickExtension());
166184
if (!extensionId) {

0 commit comments

Comments
 (0)