From 1d081ee88dced43fef920aa656dd265e77dd0d93 Mon Sep 17 00:00:00 2001
From: arsh244 <arsh244s@gmail.com>
Date: Tue, 1 Nov 2022 11:42:28 +0530
Subject: [PATCH] fixed installation time bug, added support for user login
 endpoint

---
 rest_api_authentication.routing.yml     |  2 +-
 rest_api_authentication.services.yml    |  4 +++
 src/Authentication/Provider/restAPI.php |  3 +++
 src/Routing/RouteSubscriber.php         | 34 +++++++++++++++++++++++++
 4 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 src/Routing/RouteSubscriber.php

diff --git a/rest_api_authentication.routing.yml b/rest_api_authentication.routing.yml
index a5c861e..d9e4ae6 100644
--- a/rest_api_authentication.routing.yml
+++ b/rest_api_authentication.routing.yml
@@ -11,7 +11,7 @@ rest_api_authentication.request_api_support:
   path: /admin/config/people/rest_api_authentication/requestSupport
   defaults:
     _title: 'miniOrange API Authentication Request Support'
-    _controller: '\Drupal\rest_api_authentication\Form\rest_api_authenticationController::openSupportRequestForm'
+    _controller: '\Drupal\rest_api_authentication\Controller\rest_api_authenticationController::openSupportRequestForm'
   requirements:
     _permission: 'administer site configuration'
 
diff --git a/rest_api_authentication.services.yml b/rest_api_authentication.services.yml
index e91ec76..062866a 100644
--- a/rest_api_authentication.services.yml
+++ b/rest_api_authentication.services.yml
@@ -9,3 +9,7 @@ services:
       public: false
       tags:
         - { name: page_cache_request_policy }
+  rest_api_authentication.route_subscriber:
+    class: Drupal\rest_api_authentication\Routing\RouteSubscriber
+    tags:
+      - { name: event_subscriber }
diff --git a/src/Authentication/Provider/restAPI.php b/src/Authentication/Provider/restAPI.php
index 825ea57..a04dafc 100644
--- a/src/Authentication/Provider/restAPI.php
+++ b/src/Authentication/Provider/restAPI.php
@@ -69,6 +69,9 @@ class restAPI implements AuthenticationProviderInterface {
 
     $api_error = array();
 
+    if ($request->getPathInfo() == "/user/login") {
+      return null;
+    }
     $authentication_method = \Drupal::config('rest_api_authentication.settings')->get('authentication_method');
     switch ($authentication_method) {
       case 0:
diff --git a/src/Routing/RouteSubscriber.php b/src/Routing/RouteSubscriber.php
new file mode 100644
index 0000000..1a79fbb
--- /dev/null
+++ b/src/Routing/RouteSubscriber.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Drupal\rest_api_authentication\Routing;
+
+use Drupal\Core\Routing\RouteSubscriberBase;
+use Symfony\Component\Routing\Route;
+use Symfony\Component\Routing\RouteCollection;
+
+/**
+ * Listens to the dynamic route events.
+ */
+class RouteSubscriber extends RouteSubscriberBase {
+  /**
+   * {@inheritdoc}
+   */
+  protected function alterRoutes(RouteCollection $collection) {
+    $route_login = $collection->get('user.login.http');
+    $route_login->addOptions([
+      '_auth' => [
+        'rest_api_authentication'
+      ],
+    ]);
+  }
+
+  /**
+   * @param Route $route
+   *
+   * @return false|true
+   */
+  private function restLoginRount(Route $route) {
+    $path = $route->getPath();
+    return strpos($path,'/user/login?_format=');
+  }
+}
-- 
GitLab