From da27b36eb410c481598d3b7fec70897102906f46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20P?= Date: Mon, 28 Oct 2024 10:34:32 +0100 Subject: [PATCH] Add basic auth + draft templates --- assets/app.js | 35 +++++++- assets/img/favicon.png | Bin 0 -> 13350 bytes assets/img/guide.png | Bin 0 -> 5106 bytes assets/img/media.png | Bin 0 -> 2997 bytes assets/styles/app.css | 15 +++- config/packages/security.yaml | 13 ++- src/Controller/HomeController.php | 2 +- src/Controller/LoginController.php | 1 + src/Entity/User.php | 125 +++++++++++++++++++++-------- src/Repository/UserRepository.php | 60 ++++++++++++++ templates/base.html.twig | 4 +- templates/home/index.html.twig | 63 +++++++++++++++ templates/login/index.html.twig | 14 ++-- 13 files changed, 277 insertions(+), 55 deletions(-) create mode 100644 assets/img/favicon.png create mode 100644 assets/img/guide.png create mode 100644 assets/img/media.png create mode 100644 src/Repository/UserRepository.php create mode 100644 templates/home/index.html.twig diff --git a/assets/app.js b/assets/app.js index 8755ccb..71efa05 100644 --- a/assets/app.js +++ b/assets/app.js @@ -24,8 +24,35 @@ function showPasswd(selector) { }); } -document.addEventListener('DOMContentLoaded', () => { - if (location.pathname.includes('login')) { - showPasswd('#show-pw'); +console.log('whatever'); + +if (location.pathname.includes('login')) { + showPasswd('#show-pw'); + + document.querySelector('#submit > button').addEventListener('click', function () { + this.parentElement.classList.add('is-loading'); + }); + + const error = document.querySelector('.is-danger'); + + if (error) { + error.querySelector('.delete').addEventListener('click', () => { + error.classList.add('is-hidden'); + }); } -}); +} + +if (! location.pathname.includes('login')) { + const vocabs = document.querySelector('#vocabs'); + document.querySelector('#for-vocabs').addEventListener('click', function () { + vocabs.classList.toggle('is-hidden'); + + if (this.firstElementChild.classList.contains('fa-angle-right')) { + this.firstElementChild.classList.remove('fa-angle-right'); + this.firstElementChild.classList.add('fa-angle-down'); + } else { + this.firstElementChild.classList.remove('fa-angle-down'); + this.firstElementChild.classList.add('fa-angle-right'); + } + }); +} \ No newline at end of file diff --git a/assets/img/favicon.png b/assets/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..32c765309d51001f399a3f8e7262206b13bf7254 GIT binary patch literal 13350 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 literal 0 HcmV?d00001 diff --git a/assets/img/media.png b/assets/img/media.png new file mode 100644 index 0000000000000000000000000000000000000000..2a261478a125b7a6d76fcca42c26184816064e27 GIT binary patch literal 2997 zcmc&$c{r478-HfbOf*xod}$(kDOrZ(WGm|-V~N7i*dk=ogdrwIncdKY@AU6?eeZQW*Zo}g{oL#G-uLt4oU$_AiQ0<-0PHj) z8QTB=gSIdrybU7G0r_4K*-j%lTm}HWYiq$kYMLmtp_myP+6AZ04i8^WJ1^F>F!HoY ztg*C{NIY3-r*T?2TD6^k$w8vDrd&s5J_}pn&2KKScTsR(4NzJU4{VUcXBZ~DRYb{N zi+}2>q~zhMy`3j7aN~&Ql4s^V8rBJu?@ct)P5u@XQ%bP~alH zi$1Xb_?m%zB(bY^iFT$q?K4tIu_rET7e-~n2Dm?r@Jam~3SYDWZ2H^YDkWHSE|+rU z9e5q~SlXaBaB+sdpbHAW{dEMmb2s~E_kpXeSkJDtHs3QDaL_Cd2U;fpXc7jaqA(z_ zAFwgoA)T;f^!v9vtw;9+opXXfQD?Cf% z?ha(X{(XGIpGba7F&XTVD6C1CLXM$e(K$8+U#y)*>Zc-|h@>NCD8G#bZ9?D;opVkh zv>h4Cefhn$dvCsZVKH@7;nO!kBRMu^CQkXlEU ztuYX=%K+L42%^e>%YG2j;K)+JvDQ3@wPtuAO-9cb3A5yR$Y3G(=q@Tu4iDPMXag|h zL8Qfj(UUwR1`n!tQ^VB}ZX9)Xu{nb%$l@WbaI6Eqf2s)#vdB8BB@C*U?I8z+d%E79G48H+KnHMuXY2D6uk4Le{BFIr zh_IwOBpDqL2|T+yIy%neVfu=0&X}7qEsa>5XozW|L{rtYM7_Epy}S2Ub6emyKwM z7iua_`0@#E7#Qv2sO2JUw(1czeEm2ZT|!V+L)2#Vmt}@MHL7s#%-C{W5{Uy%sZpkP zy)}N!!I@Pi^Dj8-R;mm7qUP^LV>V{Y*sb~?5MVJ?Vs$*+ z%j3c=43B8s6VSl}Ub zPXLo{rN5uIfDmI9;7FDAL1{yZill(91;|AuA$qOCl!pZ zG^S299b=aa=IrF?Z5WmzMs)W;st$Vd;YV}ZH|VC7+KnMu+4nutZk6QgLog}0||+DXHm1vL+mL1Y=xq2Of~d;Gs_T)#ERgU+wB7p_(Ytuv!HNhmcLebT{2%h5V&{TH5*ph)LKsFnZ|fQ|+c8V*x|XOm_ZtX4EhSOutW)Wfhc(qt z^Jl)?2ecnEzOE{&UuzKZtUS2o>W&sP5V$KXznRiYbBcw!1W>b7WWb==0nK5j-0Z4c zTG*F*u_bjj_|QC5v6*R^adIoQ9s9tOk^;YmQGS)<)X=Mnc(x1>J0rzAD=RsCU~+9D zV^V#NA_Z&C|8=@Iz2{<*)E|LCs3!HfaRjV6t>3?9cxp)eMMZprED(F>p2^6q>u@n# z!M)dGgagl7F-rQQ)`166mMfOubwpw0zwCEln7LiP!%E%`-+2-cFX9sA%P(R}!=p@0 z%;QuP>WW5Fl**^ErSR>*&wc1hGzf00_`Fw%ktWAR5Mu)vn_U& z{4?|};ZAt2xV625^mSjL5)P}+PIow|&1H`Z8`K${4uzg9=tpzbhvr8^@kb+7JS+03 zYk?$+9)mwDsTg?a@}tvLA@n{W#&uv^!YdAXoI@eZABbIzjsV7ob#zu%1UA!ME>>{s z!*lxyddO(cz`!p-W{;Elc5K$7%87_;Mqc%ona*g!-ST_716yzQC*3hLESjgSCb*X~ z*!4_Eh7Sit|0jI$15A^fgFS@BICN5g)=|s$(!X@XSk3jC=TaR^i z3bpAwqWs%vglUpn$%n9q@`U2cKW#{B#UejxiBZk6q%2o;Ae8jxE%rx{7UJD5--I_< Vl>yQb_}#4|W+qm~MMiEB{{|h>3oZZv literal 0 HcmV?d00001 diff --git a/assets/styles/app.css b/assets/styles/app.css index 03ead64..0b0d436 100644 --- a/assets/styles/app.css +++ b/assets/styles/app.css @@ -4,4 +4,17 @@ body { font-family: 'nunitolight'; -} \ No newline at end of file +} + +.arcoa-menu { + background-color: rgba(66,135,199,0.98); + max-height: 100vh; + overflow-y: auto; +} +#vocabs a { + color: #fff; +} +/* For dev only*/ +.sf-toolbar-clearer { + display: none !important; +} diff --git a/config/packages/security.yaml b/config/packages/security.yaml index 2689869..43632b6 100644 --- a/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -4,7 +4,12 @@ security: Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto' # https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider providers: - users_in_memory: { memory: null } + # used to reload user from session & other features (e.g. switch_user) + app_user_provider: + entity: + class: App\Entity\User + property: username + # used to reload user from session & other features (e.g. switch_user) firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ @@ -15,7 +20,7 @@ security: check_path: app_login enable_csrf: true lazy: true - provider: users_in_memory + provider: app_user_provider # activate different ways to authenticate # https://symfony.com/doc/current/security.html#the-firewall @@ -27,8 +32,8 @@ security: # Note: Only the *first* access control that matches will be used access_control: - { path: ^/$, roles: ROLE_USER } - # - { path: ^/admin, roles: ROLE_ADMIN } - # - { path: ^/profile, roles: ROLE_USER } + - { path: ^/admin, roles: ROLE_ADMIN } + - { path: ^/profile, roles: ROLE_USER } when@test: security: diff --git a/src/Controller/HomeController.php b/src/Controller/HomeController.php index 261aac6..6ccfe8e 100644 --- a/src/Controller/HomeController.php +++ b/src/Controller/HomeController.php @@ -11,7 +11,7 @@ class HomeController extends AbstractController #[Route('/', name: 'app_home')] public function index(): Response { - return $this->render('index.html.twig', [ + return $this->render('home/index.html.twig', [ 'controller_name' => 'HomeController', ]); } diff --git a/src/Controller/LoginController.php b/src/Controller/LoginController.php index 585546e..d2fac88 100644 --- a/src/Controller/LoginController.php +++ b/src/Controller/LoginController.php @@ -2,6 +2,7 @@ namespace App\Controller; +use App\Entity\User; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; diff --git a/src/Entity/User.php b/src/Entity/User.php index c5a7b15..2bef50d 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -4,57 +4,44 @@ namespace App\Entity; use App\Repository\UserRepository; use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; +use Symfony\Component\Security\Core\User\UserInterface; #[ORM\Entity(repositoryClass: UserRepository::class)] -#[ORM\Table(name: '`user`')] -class User +#[ORM\UniqueConstraint(name: 'UNIQ_IDENTIFIER_USERNAME', fields: ['username'])] +class User implements UserInterface, PasswordAuthenticatedUserInterface { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; - #[ORM\Column(length: 30)] - private ?string $firstName = null; - - #[ORM\Column(length: 40)] - private ?string $lastName = null; - - #[ORM\Column(length: 30)] + #[ORM\Column(length: 180)] private ?string $username = null; - #[ORM\Column(length: 200)] + /** + * @var list The user roles + */ + #[ORM\Column] + private array $roles = []; + + /** + * @var string The hashed password + */ + #[ORM\Column] private ?string $password = null; + #[ORM\Column(length: 30, nullable: true)] + private ?string $firstname = null; + + #[ORM\Column(length: 40, nullable: true)] + private ?string $lastname = null; + public function getId(): ?int { return $this->id; } - public function getFirstName(): ?string - { - return $this->firstName; - } - - public function setFirstName(string $firstName): static - { - $this->firstName = $firstName; - - return $this; - } - - public function getLastName(): ?string - { - return $this->lastName; - } - - public function setLastName(string $lastName): static - { - $this->lastName = $lastName; - - return $this; - } - public function getUsername(): ?string { return $this->username; @@ -67,6 +54,43 @@ class User return $this; } + /** + * A visual identifier that represents this user. + * + * @see UserInterface + */ + public function getUserIdentifier(): string + { + return (string) $this->username; + } + + /** + * @see UserInterface + * + * @return list + */ + public function getRoles(): array + { + $roles = $this->roles; + // guarantee every user at least has ROLE_USER + $roles[] = 'ROLE_USER'; + + return array_unique($roles); + } + + /** + * @param list $roles + */ + public function setRoles(array $roles): static + { + $this->roles = $roles; + + return $this; + } + + /** + * @see PasswordAuthenticatedUserInterface + */ public function getPassword(): ?string { return $this->password; @@ -78,4 +102,37 @@ class User return $this; } + + /** + * @see UserInterface + */ + public function eraseCredentials(): void + { + // If you store any temporary, sensitive data on the user, clear it here + // $this->plainPassword = null; + } + + public function getFirstname(): ?string + { + return $this->firstname; + } + + public function setFirstname(?string $firstname): static + { + $this->firstname = $firstname; + + return $this; + } + + public function getLastname(): ?string + { + return $this->lastname; + } + + public function setLastname(?string $lastname): static + { + $this->lastname = $lastname; + + return $this; + } } diff --git a/src/Repository/UserRepository.php b/src/Repository/UserRepository.php new file mode 100644 index 0000000..4f2804e --- /dev/null +++ b/src/Repository/UserRepository.php @@ -0,0 +1,60 @@ + + */ +class UserRepository extends ServiceEntityRepository implements PasswordUpgraderInterface +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, User::class); + } + + /** + * Used to upgrade (rehash) the user's password automatically over time. + */ + public function upgradePassword(PasswordAuthenticatedUserInterface $user, string $newHashedPassword): void + { + if (!$user instanceof User) { + throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', $user::class)); + } + + $user->setPassword($newHashedPassword); + $this->getEntityManager()->persist($user); + $this->getEntityManager()->flush(); + } + + // /** + // * @return User[] Returns an array of User objects + // */ + // public function findByExampleField($value): array + // { + // return $this->createQueryBuilder('u') + // ->andWhere('u.exampleField = :val') + // ->setParameter('val', $value) + // ->orderBy('u.id', 'ASC') + // ->setMaxResults(10) + // ->getQuery() + // ->getResult() + // ; + // } + + // public function findOneBySomeField($value): ?User + // { + // return $this->createQueryBuilder('u') + // ->andWhere('u.exampleField = :val') + // ->setParameter('val', $value) + // ->getQuery() + // ->getOneOrNullResult() + // ; + // } +} diff --git a/templates/base.html.twig b/templates/base.html.twig index 848301d..ee542bf 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -3,7 +3,7 @@ {% block title %}Welcome!{% endblock %} - + {% block stylesheets %} {% endblock %} @@ -19,7 +19,7 @@

About

Credits

- ArCOA Data Entry - Copyright © 2021 - {{ 'now' | date('Y') }} + ArCOA - Copyright © 2021 - {{ 'now' | date('Y') }} CNR-ISPC - UniMi

diff --git a/templates/home/index.html.twig b/templates/home/index.html.twig new file mode 100644 index 0000000..aacddf5 --- /dev/null +++ b/templates/home/index.html.twig @@ -0,0 +1,63 @@ +{% extends 'base.html.twig' %} + +{% block title %}Home | ArCOA{% endblock %} + +{% block body %} + +
+ +
+
+ +
+

ArCOA Digital Archive

+

Archivi e Collezioni dell'Oriente Antico

+

Archives and Collections of the Ancient Near East

+ +
+
+
+

Resources

+
+ +
+
+
+
+
+

Guide

+
+ +
+
+
+
+
+
+ +{% endblock %} diff --git a/templates/login/index.html.twig b/templates/login/index.html.twig index 44045b9..7e97ce5 100644 --- a/templates/login/index.html.twig +++ b/templates/login/index.html.twig @@ -4,7 +4,7 @@ {% block body %} -
+
@@ -13,14 +13,10 @@
{% if error %}
-
-

Authentication error

- -
-
{{ error.messageKey|trans(error.messageData, 'security') }}
+
Wrong user name and/or password. Please retry
{% endif %} -
+

Sign in

@@ -41,8 +37,8 @@
-

-