Desenvolupat prototip inicial
L'estructura del codi del backend està completa, caldrà anar
desenvolupant més codi però sota la mateixa estructura.
Aquest commit introdueix la implementació de l'inici de sessió amb
comptes de Google de la UPC i un mètode de l'API que retorna totes les
assignatures disponibles.
diff --git a/inc/Auth.php b/inc/Auth.php
new file mode 100644
index 0000000..c0fc078
--- /dev/null
+++ b/inc/Auth.php
@@ -0,0 +1,59 @@
+<?php
+namespace DAFME\Covid;
+
+class Auth {
+ private $client;
+
+ public function __construct() {
+ global $conf;
+ $this->client = new \Google_Client();
+ $this->client->setApplicationName = 'dafme-covid-tracability-backend';
+ $this->client->setClientId($conf['goog']['clientId']);
+ $this->client->setClientSecret($conf['goog']['secret']);
+ $this->client->addScope('https://www.googleapis.com/auth/userinfo.email');
+ $this->client->setRedirectUri($conf['fullPath'].'oauth2callback.php');
+ $this->client->setAccessType('online');
+ }
+
+ public function getAuthUrl() {
+ return $this->client->createAuthUrl();
+ }
+
+ public function handleCallback() {
+ global $_GET, $con;
+ if (isset($_GET['error']) || !isset($_GET['code'])) return 1;
+
+ $accessToken = null;
+
+ try {
+ $accessToken = $this->client->fetchAccessTokenWithAuthCode($_GET['code']);
+ } catch (\Exception $exception) {
+ return 2;
+ }
+
+ $id = $this->client->verifyIdToken();
+ if ($id === false)
+ return 3;
+
+ if (!isset($id['sub']) || !isset($id['email']) || !isset($id['email_verified']))
+ return 4;
+
+ if ($id['email_verified'] === false)
+ return 5;
+
+ $sub = $id['sub'];
+ $email = $id['email'];
+
+ if (preg_match('/upc.edu$/', $id['email']) !== 1)
+ return 6;
+
+ if (!Users::signIn($sub, $email))
+ return 7;
+
+ return 0;
+ }
+
+ public function setAccessToken($token) {
+ $this->client->setAccessToken($token);
+ }
+}