]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - src/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilder.php
Added authentication for restricted access articles
[github/wallabag/wallabag.git] / src / Wallabag / CoreBundle / GuzzleSiteAuthenticator / GrabySiteConfigBuilder.php
diff --git a/src/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilder.php b/src/Wallabag/CoreBundle/GuzzleSiteAuthenticator/GrabySiteConfigBuilder.php
new file mode 100644 (file)
index 0000000..6d4129e
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+
+namespace Wallabag\CoreBundle\GuzzleSiteAuthenticator;
+
+use BD\GuzzleSiteAuthenticator\SiteConfig\SiteConfig;
+use BD\GuzzleSiteAuthenticator\SiteConfig\SiteConfigBuilder;
+use Graby\SiteConfig\ConfigBuilder;
+use OutOfRangeException;
+
+class GrabySiteConfigBuilder implements SiteConfigBuilder
+{
+    /**
+     * @var \Graby\SiteConfig\ConfigBuilder
+     */
+    private $grabyConfigBuilder;
+    /**
+     * @var array
+     */
+    private $credentials;
+
+    /**
+     * GrabySiteConfigBuilder constructor.
+     *
+     * @param \Graby\SiteConfig\ConfigBuilder $grabyConfigBuilder
+     * @param array                           $credentials
+     */
+    public function __construct(ConfigBuilder $grabyConfigBuilder, array $credentials = [])
+    {
+        $this->grabyConfigBuilder = $grabyConfigBuilder;
+        $this->credentials = $credentials;
+    }
+
+    /**
+     * Builds the SiteConfig for a host.
+     *
+     * @param string $host The "www." prefix is ignored
+     *
+     * @return SiteConfig
+     *
+     * @throws OutOfRangeException If there is no config for $host
+     */
+    public function buildForHost($host)
+    {
+        // required by credentials below
+        $host = strtolower($host);
+        if (substr($host, 0, 4) == 'www.') {
+            $host = substr($host, 4);
+        }
+
+        $config = $this->grabyConfigBuilder->buildForHost($host);
+        $parameters = [
+            'host' => $host,
+            'requiresLogin' => $config->requires_login ?: false,
+            'loginUri' => $config->login_uri ?: null,
+            'usernameField' => $config->login_username_field ?: null,
+            'passwordField' => $config->login_password_field ?: null,
+            'extraFields' => is_array($config->login_extra_fields) ? $config->login_extra_fields : [],
+            'notLoggedInXpath' => $config->not_logged_in_xpath ?: null,
+        ];
+
+        if (isset($this->credentials[$host])) {
+            $parameters['username'] = $this->credentials[$host]['username'];
+            $parameters['password'] = $this->credentials[$host]['password'];
+        }
+
+        return new SiteConfig($parameters);
+    }
+}