From 9cb94a5b022c30543681223ae5dee374dd6287c1 Mon Sep 17 00:00:00 2001 From: Paul Horton Date: Thu, 23 Feb 2023 16:20:50 +0000 Subject: [PATCH] fix: improved handling when the User you are connecting to Nexus Lifecycle does not have enough permissions + updated docs (#243) Signed-off-by: Paul Horton --- README.md | 8 +++++++- ext-src/models/IqMultiProjectComponentModel.ts | 6 +++++- media/iq-insufficient-permissions.png | Bin 0 -> 18978 bytes 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 media/iq-insufficient-permissions.png diff --git a/README.md b/README.md index 776c8e4..bf58048 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ Configuration can be done in VSCode's extension settings: `Preferences > Setting ### AdHoc Commercial Settings -If you are a commercial Sonatype IQ user, switch the data source to `iqServer` and enter your IQ endpoint and credentials. You can enter your password which will be stored in cleartext, or you can leave this blank and be prompted for a password on start-up: +If you are a commercial Sonatype Nexus Lifecycle user, switch the data source to `iqServer` and enter your IQ endpoint and credentials. You can enter your password which will be stored in cleartext, or you can leave this blank and be prompted for a password on start-up: ![VSCode Settings](https://github.com/sonatype-nexus-community/vscode-iq-plugin/raw/main/media/iqserver-passwordprompt-dark.png) @@ -93,6 +93,12 @@ You can add a `.sonatype-config` file (`.sonatype-config.yaml` and `.sonatype-co `IncludeDev` can be set to `false` to exclude dependencies declared as Developement-only dependencies - note that not all ecosystems have this distinction. +## Nexus Lifecycle Permissions + +The user you use to connect to your Nexus Lifecycle server must hold at least the Application Evaluator role for the Application in question. If not, you will see a warning letting you know you don't have the right permissions. + +![Nexus IQ Insufficient Permissions Screenshot](https://github.com/sonatype-nexus-community/vscode-iq-plugin/raw/main/media/iq-insufficient-permissions.png) + ## Workspace Support with Multiple Projects Starting in version 1.1.0, we now support [VS Code multi-root Workspaces](https://code.visualstudio.com/docs/editor/workspaces) that contain multiple Applications. Specifcally, this allows a Workspace to contain mulitple folders, where each folder is an Application (in Nexus IQ parlance). diff --git a/ext-src/models/IqMultiProjectComponentModel.ts b/ext-src/models/IqMultiProjectComponentModel.ts index 348e2f2..803163b 100644 --- a/ext-src/models/IqMultiProjectComponentModel.ts +++ b/ext-src/models/IqMultiProjectComponentModel.ts @@ -216,7 +216,11 @@ export class IqMultiProjectComponentModel implements ComponentModel { }, (failure) => { this.logger.log(LogLevel.ERROR, `Nexus IQ extension failure`, failure); - window.showErrorMessage(`Nexus IQ extension failure: ${failure}`); + if (failure == 403) { + window.showErrorMessage('Nexus IQ extension: Insufficient Permissions (403) - do you hold the Application Evaluator role for your Application?') + } else { + window.showErrorMessage(`Nexus IQ extension failure: ${failure}`); + } }); }) diff --git a/media/iq-insufficient-permissions.png b/media/iq-insufficient-permissions.png new file mode 100644 index 0000000000000000000000000000000000000000..c70f5f4ef1b726600f6b6ddb76e5f0d9e043f11a GIT binary patch literal 18978 zcmdqJg;yNS_63Rs2@o{61t$y)?k)j>1_43=nhMIAF@Zbt)0pnPPmSS!_A zKbJIlxda^@<}LND7)<`Q_clz_A$X5)Sa2`#azmzHLNzUT%$=>UU6TyS^vvAM^;_|c z#1igd1}be$3%Vx0ZM^0@MkBu+2|=KYRF@cK866Kink5@T$JMkJKP|1T*ao3a9=cab zZB9(~?<_smY!7WPrtczs>k2W2f1f@*T@$h{xT+VCM7fx(b9^n~G`SY>ZrF!b(np?T zQ!_od&5-V?5S-6GwjgM3-Kq$UTk^I1-S z$<<6XWX$B{Vcr7U$S|;BmM{pw7A)`~0zNP>@NuCqNWfog;3JU@_ur$i{n_yU-G+&N zK2cOfTt)`?t77bAYHH_fVeitUx$zCS)ug4WhKq*09G|hhEwiDCy^$%ihpof&B`^XW ze88rysf!_nhpmmBGoObb<$uoL1Gb-cgDENgbBc?#Af<-95{0ra2{?nv+0)L& z(1Xd&nd+aL{P#W*rq0GrmJTkK_I4D{_cb)KcXbh@qvZx+X79x2>sv4{Jr>p5B|MS0Q~&q|6_@N%>19dfSrY23V{C| zGohF99qb7(Fd{HA5~8Xeum>4Pjl&a9-56ru6Ed3AY0wjurTr!QrDfUJZy|vh%mZwm(S6C`RxUiBUSV{=E0o5@gzg>33xB`!z?-ik}Jq|06)m|mY^l)E3 zQD!6Ob0XZMjSlYxwhNl=#H_bmatr9x2}kQO{&Scfu80)28!hN2Rd`-^49_r$x$CG*7#a%tq|H2Uh$aWxg13VEo(9 zPAq9`GtaFXe24=61{?7spWP-YztQF6L(I*?63*u7z*cG~z6rPPewBi^TgtbVr=(T% zak$t2yohkf^G>qp&clLNJ%ifzO}0YU%kUwz?+_GHG`Sj%DaW=0QRVyfYtt^&;?KvX zE+J)G7-TFLOzr6qa0_9bf0^e5nQw0XKW6^QhCJ_K{Mvcqqk78Dm^nl&}QM;r!H_6`Md-?NbudJnU%W{X(e2B!X z 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 literal 0 HcmV?d00001