Problem/Motivation

When you click "download", there's a modal with instructions how to manually install... it's kinda like finding out your new car requires some assembly before it can be driven.

Lets create routes that leverage package managers Stage so modules can be installed from the project browser UI. Each phase within the install process can return JSON that indicates success or failure with that stage.

The Svelte integration with these endpoints can happen in a followup issue: #3312289: Svelte UI for install controllers

Steps to reproduce

Manually testing

The install process can be manually tested by accessing the endpoints in order. For example, installing paragraphs:

First, confirm 'Allow installing via UI (experimental)' is enabled in Project Browser Settings.

Then check admin/modules/project_browser/install-readiness which will verify your site is configured to handle package manager installs. Package Manager has some specific requirements in order to work.

When the site is ready, go through the five endpoints that must be accessed to begin-complete an install.

  1. admin/modules/project_browser/install-begin/drupal/paragraphs (get the stage_id from the response)
  2. /admin/modules/project_browser/install-require/drupal/paragraphs/{stage_id}
  3. /admin/modules/project_browser/install-apply/drupal/paragraphs/{stage_id}
  4. /admin/modules/project_browser/install-post_apply/drupal/paragraphs/{stage_id}
  5. /admin/modules/project_browser/install-destroy/drupal/paragraphs/{stage_id}

Remaining tasks

  • ✅ File an issue about this project
  • ☐ Manual Testing
  • ☐ Code Review
  • ☐ Accessibility Review
  • ☐ Automated tests needed/written?
Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

bnjmnm created an issue. See original summary.

bnjmnm’s picture

Quick proof of concept, here it is in action https://youtu.be/DqiXbawcc-4 ... the machine is running a little slow so there's quite a bit of loading spinner in there but it works!

bnjmnm’s picture

Assigned: bnjmnm » Unassigned
Status: Active » Needs review

If your system is running Composer 2 and Drush, this MR makes it possible to install modules directly via the UI. I bet there's a bunch of edge cases unaccounted for, but have a look!

bnjmnm’s picture

Incorporated some good feedback. The install-via-ui options are now part of a splitbutton and labeled experimental. Installing via ui can also be globally disabled via a config option.

Here's a video of the UI as of the most recent push https://youtu.be/hucpZHlt4Mg

The styles aren't perfect, but if we're good with this functionality, that could probably happen in a followup?

bnjmnm’s picture

Issue summary: View changes

bnjmnm credited fjgarlin.

bnjmnm’s picture

Pre-emptively adding credit for folks who provided feedback & direction via Slack

effulgentsia’s picture

exec("composer require drupal/$module_id --with-all-dependencies", $install_results, $status);

This is risky to do in production. The Automatic Updates initiative is working on how to do this safely, and includes a package_manager module for that within the 2.x branch of https://www.drupal.org/project/automatic_updates. That code is still beta-level, not stable.

If this MR gets merged with the simple exec() call, and not by using AU's Package Manager, then I think the form that enables this setting should include warnings to only enable this for demos/testing, and not on a real site. I'd suggest also adding a hook_requirements() that checks if this setting is enabled and if so, also adds that warning to Drupal's status report.

fjgarlin’s picture

It’s doing some validation here https://git.drupalcode.org/project/project_browser/-/merge_requests/154/... to address security issues, and marking things as experimental.

It’s adding options to disable and enable as needed so some of the feedback is somehow addressed.

I think this POC is to really show the capabilities of the module.

(edit as I misunderstood this part)It doesn’t need to be a requirement at all. It could just show the options if they are available AND enabled, but no need to require anything to install the module.

fjgarlin’s picture

Status: Needs review » Needs work

Small change required to check for the new enable/disable flag to avoid running things if we query the endpoint directly and `ui_install` is false. Right now, even if the setting is false, it would run the commands.

xjm’s picture

@fjgarlin, @effulgentsia is a member of the Drupal Security Team (edit: as am I). As such, his recommendation for security issues, even for an experimental module. The above update is very dangerous, and should not be committed until it has been refactored to depend on the toolchain Automatic Updates will provide.

Failure to follow the Security Team's recommendations could lead to a project losing security coverage or being marked unsupported. Let's especially not risk that for this very important strategic initiative, please. :)

xjm’s picture

Status: Needs work » Postponed

Per #10 and #13, I am marking this issue postponed on Autoupdates' solution. The MVP for Project Browser should not include UI downloads.

fjgarlin’s picture

@xjm, not a problem. I understand, I was mostly explaining how the commands were sanitized, but I also understand the significance of adding an "exec" command into the code and the recommendation made by @effulgentsia. It also makes sense to coordinate with Automatic Updates, since that's the problem that they're also trying to solve.

Apologies if my comment was taken the wrong way, I was only explaining the code, but not addressing in any way the significance of the comment made.

Looking forward to the day when these two initiatives formally "meet" :-)

Edit: and thank you both for chipping in and the great work that you do. We’re adding many features and sometimes get too eager to get more shipped

xjm’s picture

Looking forward to the day when these two initiatives formally "meet" :-)

Yeah me too! It is going to improve Drupal in a fundamental way. Thanks for your work on this.

I also chatted with @effulgentsia a bit more and wanted to make it clear that if there is value for folks here in experimenting with the UI patterns we want to have for this, and with workflows etc., I think that's great, and MRs and patches still work on postponed issues. It's just that we shouldn't commit said work until we have the backend part solved properly.

fjgarlin’s picture

It is clear that we cannot continue with the current approach, but we could bring everything to a safer state, or at least make a plan for it.
Based on the above feedback, a list of remaining tasks could be:

Remove "exec" calls as it is dangerous.
* It is used to download modules and we should use package_manager for this.
* It is used to enable modules and we can use ModuleHandler.

Leverage "package_manager" module which comes with "automatic updates". As this is in beta stage, we should:
* Check if the module is available and if it isn't, don't offer the functionality and inform the user (in the admin page?)
* If the module is enabled, we should probably still have our own toggle, defaulting to "disabled", and warn the user if they enable it that the feature is experimental.
* If it's enabled, then we could show a warning message on the PB landing page, and also display a warning on the status report using "hook_requirements" as suggested by @effulgentsia

Address current outstanding feedback:
* The endpoint to download/enable should check for the status of the PB toggle and not do anything if it's disabled
* We should also check that the given module is "safe". PluginInterface does NOT have a method for it yet, it could be a method called "isModuleSafe", where we pass a "machine_name" and the plugin returns a bool.
** An example could be that some modules could have the "revoked" security coverage status, and these are filtered out in the list, but a malicious user could create an endpoint that actually installs one of those modules

If there are more things that you can think of please add them to the list so we have a plan to follow. Maybe update the description with this info?

And finally, validation from @effulgentsia and/or @xjm on the plan, or feedback on whether this is the right approach or not, would be awesome.

bnjmnm’s picture

I see two streams of work that can be happening here

  1. Addressing the back-end concerns mentioned throughout the issue and distilled into some potential tasks in #17. This part of the process has a dependency on some of the functionality that autoupdates will provide, so that work is postponed/blocked.
  2. Work on the front end Svelte app doesn't need to be blocked. Having the temporary exec() has already surfaced several UX and design questions. This front end portion doesn't need to be postponed. It can't be committed until we can provide a secure back end, but there are major benefits to having much of this figured out before the secure installation process is available. So while the exec() calls should absolutely be removed, I think the removal should wait until the alternative is available so there's something to build the Svelte app around. There will be some differences in the returned data from Autoupdates and exec() calls but I don't believe the differences would result in that different of a front end.

Keeping this branch alive also gives us a way to provide a far more exciting way to demo Project Browser - actually showing the functionality that is coming soon is far more exciting than a verbal description.

narendrar’s picture

I am getting below error while trying to install module with GUI:

Installation failed, deleting ./composer.json.

In RequireCommand.php line 210:
                                                                               
  No composer.json present in the current directory (./composer.json), this m  
  ay be the cause of the following exception.                                  
                                                                               

In PackageDiscoveryTrait.php line 375:
                                                                               
  Could not find a matching version of package drupal/accessible_media_embed.  
   Check the package spelling, your version constraint and that the package i  
  s available in a stability which matches your minimum-stability (stable).    
                                                                               

require [--dev] [--dry-run] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--fixed] [--no-suggest] [--no-progress] [--no-update] [--no-install] [--update-no-dev] [-w|--update-with-dependencies] [-W|--update-with-all-dependencies] [--with-dependencies] [--with-all-dependencies] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--apcu-autoloader-prefix APCU-AUTOLOADER-PREFIX] [--] [<packages>...]

Basically I am getting error while running below command through terminal or GUI
composer require drupal/accessible_media_embed --with-all-dependencies
And composer install is working for composer require 'drupal/accessible_media_embed:^1.0@beta'

fjgarlin’s picture

Which version of Drupal is that? Is that using the package_manager module? Could it be your local install? I just tried that command with my local install and it works without issues.

➜  composer require drupal/accessible_media_embed --with-all-dependencies

Using version ^1.0@beta for drupal/accessible_media_embed
./composer.json has been updated
Running composer update drupal/accessible_media_embed --with-all-dependencies
Gathering patches for root package.
Loading composer repositories with package information                                                          Info from https://repo.packagist.org: #StandWithUkraine
Updating dependencies
Lock file operations: 3 installs, 0 updates, 0 removals
  - Locking drupal/accessible_media_embed (1.0.0-beta2)
  - Locking drupal/embed (1.5.0)
  - Locking drupal/entity_embed (1.2.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 4 installs, 0 updates, 0 removals
  - Downloading drupal/embed (1.5.0)
  - Downloading drupal/entity_embed (1.2.0)
  - Downloading drupal/accessible_media_embed (1.0.0-beta2)
...
narendrar’s picture

I am using Drupal 9.3.16 on local setup without package_manager module.

fjgarlin’s picture

Ok, in that case, I wouldn't worry too much for now as we know that we need to replace the exec commands for package_manager ones. The backend part of this issue still needs a lot of work (see #17 and #18), so it's a big WIP.

mmjvb’s picture

Two things wrong with the command used:
- no stability flag
- wrong option

- No stabilty flag: The module doesn't have stable releases. By default only stable releases are allowed. Unless your project set minimum-stability, which normally is a bad idea! Suggest @beta as stability, disallowing alpha!

- wrong option: On the require command the option is --update-with-[all-]dependencies on the update command it is --with-dependencies. You might want to use -w|-W as those shortcuts are the same. Not convinced it is the right thing to do in this case. Don't like it that it updates something I didn't ask for.

chrisfromredfin’s picture

+1 on keeping the branch alive and just not merging it without backend re-work. But keeping it alive to flush out issues on the front-end side is a great idea. We can ask Site Builder sub-committee for feedback on the UI for installation. This might need to be spun up to test by them, I'll see if I can get @shaal to drop a link in this issue to fire up DrupalPod with this branch's HEAD.

shaal’s picture

I generated a link to test the issue-branch install-via-ui.
Click on the link to test it in DrupalPod -
https://gitpod.io/#DP_PROJECT_NAME=project_browser,DP_ISSUE_FORK=project...

bnjmnm’s picture

One UI question that could potentially get solved here: Should PB users be made aware of dependenee modules that will be installed/enabled with the module they've chosen?

Perhaps this could happen in a confirmation modal ("installing Paragraphs will also install Entity Reference Revisions, proceed?".

Maybe it could be in a will also install the following:" details element that can be opened to show them?

There are likely some other options I haven't thought of... and there's probably several more use cases such as this we need to come up with solutions for and this is a good fork to do that on.

fjgarlin’s picture

That info could be added in the "BrowserController" as we're already asking for module information in the "getModuleStatuses()" function.

bakulahluwalia’s picture

Feature works fine with some glitches. I was able to download colorbox and metatag module using UI. Logs and glitch screen stuck screenshot is attached. Great work @bnjmnm.
screenshot 1
screenshot 2

bnjmnm’s picture

Status: Postponed » Needs work

The trying_package_manager branch works locally using an Autoupdates-team-approved approach with Package Manager. I'm having difficulty properly declaring Package Manager or Autoupdates as dependencies. Autoupdates itself shouldn't be needed, but I tried that since Package Manager is a submodule it depends on. You can look through the past ~10 commits to see the different approaches I tried, some of which were advised by @tedbow and @phenaproxima who are working on Automatic Updates.

Tests won't pass until the dependencies can be declared properly, but this will work for anyone that has Package Manager (or Automatic Updates) enabled on their site. Installs can now happen securely so this can return to "Needs Work" status.

There's additional work to do beyond the dependencies, but it would be helpful to scope how much this specific issue needs to accomplish and how much can be deferred to followups.

bnjmnm’s picture

Title: Install directly via GUI when composer/drush available » Install directly via GUI using Package Manager + core APIs
chrisfromredfin’s picture

We need to ensure we're only dependent on package_manager and not automatic_updates. The only reason it currently is AU is due to test runner fails, so let's ensure we fix that (either locally or upstream, if needed).

tim.plunkett’s picture

Issue tags: +Project Browser 2.0

bnjmnm’s picture

Status: Needs work » Needs review
StatusFileSize
new123.74 KB

Merge request 177 is the new canon here. This installs with Package Manager and has all sorts of access and compatibility checks, plus makes it possible to break the installer lock so if there's an error you're not indefinitely prevented from performing additional downloads.

Package Manager has several validators that check if a site can be used with it. If any of those fail, downloads aren't possible and there's a warning.

Example: if there are unrun update hooks:

Also, although Autoupdates needs to be in the filesystem, only Package Manager (a submodule of Autoupdates) needs to be enabled.

fjgarlin’s picture

Status: Needs review » Needs work
bnjmnm’s picture

Status: Needs work » Needs review

I'm switching this to "Needs Review", aware that there are several unaddressed bits of (very good feedback) in the MR. All that feedback still needs to be addressed, but additional review is still needed due to how extensive the change here is.

I.e. there's already some good feedback but please keep reviewing. Manual reviews in particular would be great.

tedbow’s picture

Status: Needs review » Needs work

Settings to needs work for suggestions in MR

tedbow’s picture

After talking with @bnjmnm I reopened #3245770: Create a service to composer install via package_manager from Automatic Updates to do only the package_manager integration in a single issue. That issue is now more narrowly scoped than this issue and we it is committed this issue could be update to use the Installer service that it provides to do the Composer installs

tedbow’s picture

bnjmnm’s picture

In #3300061: [policy, no patch] Determine Composer validation rules for installing through Composer I'm proposing having some validation result in warnings that the user can choose to click through (such as "Installing Paragraphs will also install Entity Reference Revisions", while other validation checks would do the expected cessation of the install process (such as identifying a to-be-installed release as insecure). Within the scope of this issue, I think it's best to just have all checks result in stopping the install process. Distinguishing error vs warning and adding a UI to accommodate that will make this already large issue even harder to review. Implementing a warning/confirm pattern for some checks can be done in a followup. In the event that the followup is slow to land, the UI feature is less user-friendly but it still better than nothing, and the implementation will be erring on the side of secure.

bnjmnm’s picture

At the moment this is midway switching to the new installer service. The errors are output differently then before, so the Svelte app and/or controller need to be refactored so the UI reports install errors when they happen.

srishtiiee made their first commit to this issue’s fork.

srishtiiee’s picture

Status: Needs work » Needs review
tedbow’s picture

Status: Needs review » Needs work

Needs work for MR comments.

narendrar’s picture

srishtiiee’s picture

Status: Needs work » Needs review

Addressed most of the feedback and added comments to the rest. Putting up for re-review.

bnjmnm’s picture

The installerTest is failing because it's seeing unfired post_update hooks. I thought the easiest way to address that would be running tests on 10.0.x since PB isn't getting into 9.x anyway, but as seen above there are composer errors when I attempt that. It's possible they're even simple composer errors that my JavaScript head isn't willing to accept.

bnjmnm’s picture

As of the last push to the mr 👆 this has legit test coverage of the controller when everything is working correctly. That test should be expanded to include scenarios that occur when a catch{} is reached. The best way to do this is to use TestSubscriber to trigger errors during different stages. It's the same approach as #3310864: Create Install Readiness controller (which is currently merged in this MR as well, so getting that in will make this smaller)

It's probably also best to create a new branch without the Svelte changes that we'll commit in this issue to keep scope manageable. With the test coverage, we don't need the UI to be in the same issue. The Svelte-including branch should stick around so it can be copied to the followup (it was not simple!)

bnjmnm’s picture

Issue summary: View changes

The test methods don't have docblocks yet, but this can be considered ready for review.

bnjmnm’s picture

This has been moved into Merge Request 265, which is now the only open MR on this issue. All threads on prior MRs are resolved, and this version was provided to make rebasing more manageable.

phenaproxima’s picture

Status: Needs review » Needs work
bnjmnm’s picture

Status: Needs work » Needs review
rkoller’s picture

@chrisfromredfin asked over in a thread on the drupal slack in the project browser channel if i could comment in here (even though i thought it wouldn't be beneficial - but he said "the testing is still useful for the existing issue because your testing can help prove that applying the initial MR has not broken anything")

I've applied the merge request to an install of Drupal 9.5. successfully with composer patches locally. alongside i've composer required and installed automatic_updates and package_manager after i read the description of the experimental checkbox in /admin/config/development/project_browser . but on the project browser main page the download and install button still lead to either the modal or forward to the extend page.

bnjmnm’s picture

Issue summary: View changes

I've applied the merge request to an install of Drupal 9.5. successfully with composer patches locally. alongside i've composer required and installed automatic_updates and package_manager after i read the description of the experimental checkbox in /admin/config/development/project_browser . but on the project browser main page the download and install button still lead to either the modal or forward to the extend page.

The scope of this issue does not include any changes to the UI. It adds endpoints that make it possible to install a module via the UI, but the UI integration is scoped to another issue.

The install process can be manually tested by accessing the endpoints in order. For example, installing paragraphs:
First check admin/modules/project_browser/install-readiness which will verify your site is configured to handle package manager installs. Package Manager has some specific requirements in order to work.

When the site is ready, go through the five endpoints that must be accessed to begin-complete an install.

  1. admin/modules/project_browser/install-begin/drupal/paragraphs (get the stage_id from the response)
  2. /admin/modules/project_browser/install-require/drupal/paragraphs/{stage_id}
  3. /admin/modules/project_browser/install-apply/drupal/paragraphs/{stage_id}
  4. /admin/modules/project_browser/install-post_apply/drupal/paragraphs/{stage_id}
  5. /admin/modules/project_browser/install-destroy/drupal/paragraphs/{stage_id}
bnjmnm’s picture

bnjmnm’s picture

Issue summary: View changes
rkoller’s picture

StatusFileSize
new133.29 KB

I haven't updated the merge request after my previous comment. silencing the validator was a bit tricky until i realized that the node modules folder for svelt in project browser was preventing it from running through. i've simply removed the node modules folder for now. after that i went through the steps outlined in the issue summary. that way i was able to successfully install the paragraphs module:

install steps with package manager calls inside separate safari windows with a final proof of the drupal extend page filtering for para showing the four paragraphs modules

and one additional observation. after succesfully installing the paragraphs module i've requested a stage id for installing paragraphs again /admin/modules/project_browser/install-begin/drupal/paragraphs and i got a new stage id in return {"phase":"create","status":0,"stage_id":"wIYQb81C8zPTaaJO5-gh3gnzDRsteP9NiWCIRX_dIPE"}

rkoller’s picture

One odd thing. I am still on the same drupal 9.5 install (with php 8.1) from yesterday where i was able to install the paragraphs module. I wanted to try to install another module now to test something else. I've accessed admin/modules/project_browser/install-begin/drupal/pathauto . But i got the following message returned: {"message":"The install stage is locked by a process outside of Project Browser","unlock_url":""}

I've then visisted: admin/modules/project_browser/install-readiness (thought after everything was fine yesterday with no changes it would be still ready for installs today). but i run into:

The website encountered an unexpected error. Please try again later.

LogicException: Drupal\package_manager\Stage::getStageDirectory() cannot be called because the stage has not been created or claimed. in Drupal\package_manager\Stage->getStageDirectory() (line 659 of modules/contrib/automatic_updates/package_manager/src/Stage.php).
Drupal\package_manager\Validator\StagedDBUpdateValidator->hasStagedUpdates(Object, Object) (Line: 176)
Drupal\package_manager\Validator\StagedDBUpdateValidator->getExtensionsWithDatabaseUpdates(Object) (Line: 76)
Drupal\package_manager\Validator\StagedDBUpdateValidator->checkForStagedDatabaseUpdates(Object, 'Drupal\package_manager\Event\StatusCheckEvent', Object)
call_user_func(Array, Object, 'Drupal\package_manager\Event\StatusCheckEvent', Object) (Line: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object) (Line: 64)
Drupal\project_browser\Controller\InstallReadinessController->checkReadiness()
call_user_func_array(Array, Array) (Line: 123)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 580)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 124)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) (Line: 97)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 159)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 707)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)

but if i go via the admin interface to admin/modules/automatic-updateno errors due to failed validator tests are shown. it happens with the state of the merge request i've tested with yesterday. i've also updated to the current state (there were two commits since the last time) and retested. same result.

bnjmnm’s picture

Addressed #66 with this change.

rkoller’s picture

Status: Needs review » Needs work

thank you for working on a fix. I've applied the latest state of the merge request and cleared the caches with drush. a few observations:

1. I've accessed admin/modules/project_browser/install-readiness leaving the node_modules folder in the svelte folder of project_browser and the other time removed it. both times the output was the same: {"pm_validation":false,"stage_available":false}

2. when accessing admin/modules/project_browser/install-begin/drupal/pathauto i got {"message":"An install staging area claimed by Project Browser exists but has expired. You may unlock the stage and try the install again.","unlock_url":"\/admin\/modules\/project_browser\/install\/unlock?token=bkHtPn6oQ2iKBHflVw120RwDTxJdoRLQ17l5aDS7uJU"} but i've never got a stage_id in a previous request

3. when i try to unlock the stage again with the provided code admin/modules/project_browser/install/unlock?token=bkHtPn6oQ2iKBHflVw120RwDTxJdoRLQ17l5aDS7uJUi get Access denied - You are not authorized to access this page.

4. i've tried to initialize an install of a module i'Ve never tried to install before with admin/modules/project_browser/install-begin/drupal/danse and i also get: {"message":"An install staging area claimed by Project Browser exists but has expired. You may unlock the stage and try the install again.","unlock_url":"\/admin\/modules\/project_browser\/install\/unlock?token=bkHtPn6oQ2iKBHflVw120RwDTxJdoRLQ17l5aDS7uJU"}

bnjmnm’s picture

Status: Needs work » Needs review

@rkoller I couldn't reproduce the issue in #68 I added coverage for your use case in \Drupal\Tests\project_browser\Functional\InstallerControllerTest::testCanBreakStageWithMissingProjectBrowserLock and it seems to work. Since you're running into an access denied when attempting to access a CSRF-tokenized unlock URL my first guess would be something is incorrect about the URL, but if there's a scenario the test coverage is overlooking I'll certainly expand it to cover that and address any issues that surface.

rkoller’s picture

uhhh i guess i've figured out why the stage was not available. as you can see i've removed the backslashes from the response in #68.2 and instead used the string in #68.3 ( i've assumed only the forward slashes are necessary for the path - which turned out wrong in this case - apologies, i shouldnt make assumption and better follow the instructions in the output instead :/ ).

with the stage cleared and available again everything is behaving as expected. also installing several modules in a row worked now. i'll leave the status to needs review cuz i havent done a code review and only tested manually.

bnjmnm’s picture

Title: Install directly via GUI using Package Manager + core APIs » Install endpoints that leverage Package Manager + core APIs
phenaproxima’s picture

Status: Needs review » Reviewed & tested by the community

Ship it.

tim.plunkett’s picture

Priority: Normal » Major

Fixing credit

  • tim.plunkett committed 9b33bc5 on 1.0.x authored by bnjmnm
    Issue #3284945 by bnjmnm, srishtiiee, tim.plunkett, rkoller, fjgarlin,...
tim.plunkett’s picture

Status: Reviewed & tested by the community » Fixed

Merged! What a huge accomplishment, after incredible effort and collaboration.

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.