Skip to content
Snippets Groups Projects
Commit 5993c4b5 authored by ROUILLON Tom's avatar ROUILLON Tom
Browse files

Add token auth and change docker files

parent 8e09ee29
No related branches found
No related tags found
No related merge requests found
Showing
with 934 additions and 14 deletions
...@@ -26,7 +26,7 @@ APP_SECRET=f13d33213c1f5d6ea888c6f867c0e42c ...@@ -26,7 +26,7 @@ APP_SECRET=f13d33213c1f5d6ea888c6f867c0e42c
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" # DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8.0.32&charset=utf8mb4" # DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8.0.32&charset=utf8mb4"
# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=10.11.2-MariaDB&charset=utf8mb4" # DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=10.11.2-MariaDB&charset=utf8mb4"
DATABASE_URL="mysql://jardin:bestJardinier@database:3306/cocagne_db?charset=utf8" DATABASE_URL="mysql://jardin:jardin@database:3306/cocagne_db?charset=utf8"
###< doctrine/doctrine-bundle ### ###< doctrine/doctrine-bundle ###
###> symfony/messenger ### ###> symfony/messenger ###
...@@ -43,3 +43,9 @@ MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 ...@@ -43,3 +43,9 @@ MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
###> nelmio/cors-bundle ### ###> nelmio/cors-bundle ###
CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$' CORS_ALLOW_ORIGIN='^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$'
###< nelmio/cors-bundle ### ###< nelmio/cors-bundle ###
###> lexik/jwt-authentication-bundle ###
JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem
JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem
JWT_PASSPHRASE=jadorelesjardins
###< lexik/jwt-authentication-bundle ###
...@@ -9,8 +9,10 @@ ...@@ -9,8 +9,10 @@
"ext-iconv": "*", "ext-iconv": "*",
"api-platform/core": "^3.2", "api-platform/core": "^3.2",
"doctrine/doctrine-bundle": "^2.11", "doctrine/doctrine-bundle": "^2.11",
"doctrine/doctrine-fixtures-bundle": "*",
"doctrine/doctrine-migrations-bundle": "^3.3", "doctrine/doctrine-migrations-bundle": "^3.3",
"doctrine/orm": "^2.17", "doctrine/orm": "^2.17",
"lexik/jwt-authentication-bundle": "*",
"nelmio/cors-bundle": "^2.4", "nelmio/cors-bundle": "^2.4",
"phpdocumentor/reflection-docblock": "^5.3", "phpdocumentor/reflection-docblock": "^5.3",
"phpstan/phpdoc-parser": "^1.25", "phpstan/phpdoc-parser": "^1.25",
......
This diff is collapsed.
...@@ -15,4 +15,6 @@ return [ ...@@ -15,4 +15,6 @@ return [
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true], Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true],
ApiPlatform\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true], ApiPlatform\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true],
Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle::class => ['all' => true],
]; ];
-----BEGIN ENCRYPTED PRIVATE KEY-----
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
-----END ENCRYPTED PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0VwYt6/pdKEc3HB1/qx+
VDQyEqpzlQJFJ4FAw2QrM3e/MHjZkrn6miR0Bye5AnaZdAiR86j6T8oQnX9xhxC3
eDVbbZi1LX1inLum3i+xqpLmN9pWBGOo4cT9tHsNKE5apfhfSbFRpTIv9WCdcMn2
CbA9EqMP9u56/q6p7QVVXOB7XDYw9mVGuoy9Z+9yLFvbyNh+ynxpdPHi5Cb2qsZ9
/q514Pl20q+sOgMMY+3DRpVV/OgQZUdIf5/n4zhzydlaQP4C3tjnuWDy181C5/59
Ix9IJHSMJQUem1cdtKlXxyRDUF798/kOifS56e10OgYke5i+0Syt8qT8MU+ANrft
KSMM3UFu7ColPKHXJ8ZrsAdKo/lEzwJd9mHck/sL5dL0teFHZekwK2lJz5iqUyXz
tcCsTNMVLZA7rhMoDc3Hn4l/PLYtggglTYFVRLxNoBzT9MP0ifsjvQZXGu3sHlgF
q6M20PDaIpEHcXbwi+WHflPE2hI+Y1S1fCAE/PdE5V8A+eMUlGWH8bhvZ14clmfq
kDtlsQbHEJhpzzzuOjr03VchJFkIDvlW40Lk21PyvB77AS0y78loRqYivCslaJIg
VRvJQjzm461T9a3sTAqri1tMCL9tlYi3wPwBifMu3g9zGDpQEsUBRZtit3KZzerb
HhCG8HYjL9LWFMMG0eYZMjkCAwEAAQ==
-----END PUBLIC KEY-----
...@@ -16,3 +16,8 @@ api_platform: ...@@ -16,3 +16,8 @@ api_platform:
rfc_7807_compliant_errors: true rfc_7807_compliant_errors: true
event_listeners_backward_compatibility_layer: false event_listeners_backward_compatibility_layer: false
keep_legacy_inflector: false keep_legacy_inflector: false
swagger:
api_keys:
JWT:
name: Authorization
type: header
\ No newline at end of file
lexik_jwt_authentication:
secret_key: '%env(resolve:JWT_SECRET_KEY)%'
public_key: '%env(resolve:JWT_PUBLIC_KEY)%'
pass_phrase: '%env(JWT_PASSPHRASE)%'
api_platform:
check_path: /api/login
username_path: username
password_path: password
...@@ -2,16 +2,23 @@ security: ...@@ -2,16 +2,23 @@ security:
# https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords # https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords
password_hashers: password_hashers:
Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto' Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'
App\Entity\APIUser:
algorithm: auto
# https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider # https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider
providers: 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\APIUser
property: email
firewalls: firewalls:
dev: dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/ pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false security: false
main: # main:
lazy: true # lazy: true
provider: users_in_memory # provider: app_user_provider
# activate different ways to authenticate # activate different ways to authenticate
# https://symfony.com/doc/current/security.html#the-firewall # https://symfony.com/doc/current/security.html#the-firewall
...@@ -19,11 +26,25 @@ security: ...@@ -19,11 +26,25 @@ security:
# https://symfony.com/doc/current/security/impersonating_user.html # https://symfony.com/doc/current/security/impersonating_user.html
# switch_user: true # switch_user: true
login:
pattern: ^/api/login
stateless: true
json_login:
check_path: /api/login
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
api:
pattern: ^/api
stateless: true
jwt: ~
# Easy way to control access for large sections of your site # Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used # Note: Only the *first* access control that matches will be used
access_control: access_control:
# - { path: ^/admin, roles: ROLE_ADMIN } - { path: ^/api/docs, roles: PUBLIC_ACCESS }
# - { path: ^/profile, roles: ROLE_USER } - { path: ^/api/login, roles: PUBLIC_ACCESS }
- { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
when@test: when@test:
security: security:
......
...@@ -3,3 +3,6 @@ controllers: ...@@ -3,3 +3,6 @@ controllers:
path: ../src/Controller/ path: ../src/Controller/
namespace: App\Controller namespace: App\Controller
type: attribute type: attribute
api_login:
path: /api/login
\ No newline at end of file
<?php
namespace App\DataFixtures;
use App\Entity\APIUser;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
class AppFixtures extends Fixture
{
private $userPasswordHasher;
public function __construct(UserPasswordHasherInterface $userPasswordHasher)
{
$this->userPasswordHasher = $userPasswordHasher;
}
public function load(ObjectManager $manager)
{
// Création d'un user "normal"
$user = new APIUser();
$user->setEmail("jardin");
$user->setRoles(["ROLE_USER"]);
$user->setPassword($this->userPasswordHasher->hashPassword($user, "jardin"));
$manager->persist($user);
// Création d'un user admin
$userAdmin = new APIUser();
$userAdmin->setEmail("root");
$userAdmin->setRoles(["ROLE_ADMIN"]);
$userAdmin->setPassword($this->userPasswordHasher->hashPassword($userAdmin, "root"));
$manager->persist($userAdmin);
$manager->flush();
}
}
\ No newline at end of file
<?php
namespace App\Entity;
use App\Repository\APIUserRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
use Symfony\Component\Security\Core\User\UserInterface;
#[ORM\Entity(repositoryClass: APIUserRepository::class)]
class APIUser implements UserInterface, PasswordAuthenticatedUserInterface
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 180, unique: true)]
private ?string $email = null;
#[ORM\Column]
private array $roles = [];
/**
* @var string The hashed password
*/
#[ORM\Column]
private ?string $password = null;
public function getId(): ?int
{
return $this->id;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(string $email): static
{
$this->email = $email;
return $this;
}
/**
* A visual identifier that represents this user.
*
* @see UserInterface
*/
public function getUserIdentifier(): string
{
return (string) $this->email;
}
/**
* @see UserInterface
*/
public function getRoles(): array
{
$roles = $this->roles;
// guarantee every user at least has ROLE_USER
$roles[] = 'ROLE_USER';
return array_unique($roles);
}
public function setRoles(array $roles): static
{
$this->roles = $roles;
return $this;
}
/**
* @see PasswordAuthenticatedUserInterface
*/
public function getPassword(): string
{
return $this->password;
}
public function setPassword(string $password): static
{
$this->password = $password;
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 getUsername(): string
{
return $this->getUserIdentifier();
}
}
...@@ -48,7 +48,7 @@ class Adherent ...@@ -48,7 +48,7 @@ class Adherent
#[ORM\Column(length: 20, nullable: true)] #[ORM\Column(length: 20, nullable: true)]
private ?string $telephone3 = null; private ?string $telephone3 = null;
#[ORM\Column(length: 45, nullable: true)] #[ORM\Column(length: 45)]
private ?string $mail = null; private ?string $mail = null;
#[ORM\Column(length: 45, nullable: true)] #[ORM\Column(length: 45, nullable: true)]
...@@ -57,7 +57,7 @@ class Adherent ...@@ -57,7 +57,7 @@ class Adherent
#[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)] #[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
private ?\DateTimeInterface $dateNaissance = null; private ?\DateTimeInterface $dateNaissance = null;
#[ORM\Column(length: 200, nullable: true)] #[ORM\Column(length: 500)]
private ?string $password = null; private ?string $password = null;
#[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)] #[ORM\Column(type: Types::DATE_MUTABLE, nullable: true)]
......
<?php
namespace App\Repository;
use App\Entity\APIUser;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
use Symfony\Component\Security\Core\User\PasswordUpgraderInterface;
/**
* @extends ServiceEntityRepository<APIUser>
*
* @implements PasswordUpgraderInterface<APIUser>
*
* @method APIUser|null find($id, $lockMode = null, $lockVersion = null)
* @method APIUser|null findOneBy(array $criteria, array $orderBy = null)
* @method APIUser[] findAll()
* @method APIUser[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class APIUserRepository extends ServiceEntityRepository implements PasswordUpgraderInterface
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, APIUser::class);
}
/**
* Used to upgrade (rehash) the user's password automatically over time.
*/
public function upgradePassword(PasswordAuthenticatedUserInterface $user, string $newHashedPassword): void
{
if (!$user instanceof APIUser) {
throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', $user::class));
}
$user->setPassword($newHashedPassword);
$this->getEntityManager()->persist($user);
$this->getEntityManager()->flush();
}
// /**
// * @return APIUser[] Returns an array of APIUser objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('a')
// ->andWhere('a.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('a.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?APIUser
// {
// return $this->createQueryBuilder('a')
// ->andWhere('a.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}
...@@ -27,6 +27,18 @@ ...@@ -27,6 +27,18 @@
"./src/Repository/.gitignore" "./src/Repository/.gitignore"
] ]
}, },
"doctrine/doctrine-fixtures-bundle": {
"version": "3.5",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "3.0",
"ref": "1f5514cfa15b947298df4d771e694e578d4c204d"
},
"files": [
"src/DataFixtures/AppFixtures.php"
]
},
"doctrine/doctrine-migrations-bundle": { "doctrine/doctrine-migrations-bundle": {
"version": "3.3", "version": "3.3",
"recipe": { "recipe": {
...@@ -40,6 +52,18 @@ ...@@ -40,6 +52,18 @@
"./migrations/.gitignore" "./migrations/.gitignore"
] ]
}, },
"lexik/jwt-authentication-bundle": {
"version": "2.20",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "2.5",
"ref": "e9481b233a11ef7e15fe055a2b21fd3ac1aa2bb7"
},
"files": [
"config/packages/lexik_jwt_authentication.yaml"
]
},
"nelmio/cors-bundle": { "nelmio/cors-bundle": {
"version": "2.4", "version": "2.4",
"recipe": { "recipe": {
......
...@@ -28,3 +28,9 @@ mdp : root ...@@ -28,3 +28,9 @@ mdp : root
user : jardin user : jardin
mdp : jardin mdp : jardin
Pour avoir accès à l'api, il est nécessaire de générer un token, accessible à l'adresse http://localhost:8080/api/login.
Cette route est accessible via swagger UI.
Pour ne pas à avoir à ajouter ce token à chaque requête, il est possible de cliquer sur le bouton `Authorize` en haut à droite et d'ajouter le token dans le champ `value`.
\ No newline at end of file
...@@ -26,11 +26,10 @@ services: ...@@ -26,11 +26,10 @@ services:
php: php:
container_name: php container_name: php
build: build:
context: ./docker/php context: ./
dockerfile: ./docker/php/Dockerfile
ports: ports:
- '9000:9000' - '9000:9000'
volumes:
- ./Back_end:/var/www/symfony_docker
depends_on: depends_on:
- database - database
......
...@@ -7,9 +7,15 @@ RUN apt update && apt install -y zlib1g-dev g++ git libicu-dev zip libzip-dev zi ...@@ -7,9 +7,15 @@ RUN apt update && apt install -y zlib1g-dev g++ git libicu-dev zip libzip-dev zi
&& docker-php-ext-configure zip \ && docker-php-ext-configure zip \
&& docker-php-ext-install zip && docker-php-ext-install zip
ADD ./Back_end /var/www/symfony_docker
WORKDIR /var/www/symfony_docker WORKDIR /var/www/symfony_docker
RUN chmod 777 -R /var/www/symfony_docker/var
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN curl -sS https://get.symfony.com/cli/installer | bash RUN curl -sS https://get.symfony.com/cli/installer | bash
RUN mv /root/.symfony5/bin/symfony /usr/local/bin/symfony RUN mv /root/.symfony5/bin/symfony /usr/local/bin/symfony
\ No newline at end of file
ENV COMPOSER_ALLOW_SUPERUSER=1
RUN composer install
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment