diff --git a/.env.dist b/.env.dist index 7f453590..6de99692 100644 --- a/.env.dist +++ b/.env.dist @@ -30,11 +30,12 @@ PHPMYADMIN_ROUTER_RULE="Host(`${PHPMYADMIN_DOMAIN}`)" APP_SSO_SERVICEPROVIDER_X509CERT="MIICkDCCAfmgAwIBAgIBADANBgkqhkiG9w0BAQ0FADBlMQswCQYDVQQGEwJmcjEOMAwGA1UECAwFUEFSSVMxDDAKBgNVBAoMA1RDTTEaMBgGA1UEAwwRZnJvbnQuc29jb3RlYy5kZXYxDjAMBgNVBAcMBVBBUklTMQwwCgYDVQQLDANUQ00wHhcNMTcwOTA4MTUyNzM0WhcNMTgwOTA4MTUyNzM0WjBlMQswCQYDVQQGEwJmcjEOMAwGA1UECAwFUEFSSVMxDDAKBgNVBAoMA1RDTTEaMBgGA1UEAwwRZnJvbnQuc29jb3RlYy5kZXYxDjAMBgNVBAcMBVBBUklTMQwwCgYDVQQLDANUQ00wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMKCd0hnMKX40MYR+fZNRqMJjSiDpTPTkV9A0bfQKESZ9esPjNt8Janq+2MGLrm6cRcMXRx8yo/x7pfoCmdiu9D7VNhk69nFsNKH0PQp/jf2+vLPHXgKvlcCFvlaOB/Cvg9UnK9mq83H88LPwvrpaNRl4qDrLS5TTByEIohjFUJrAgMBAAGjUDBOMB0GA1UdDgQWBBSk8/zuzxKBEwpusxRAva7oY7MkrDAfBgNVHSMEGDAWgBSk8/zuzxKBEwpusxRAva7oY7MkrDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBDQUAA4GBAGlGJPIGYAKKkhW/EAvJbprOAwLvSEansPR8iQlGOq49k/R+mvvTKyQ4DsUglrjbTqA90MZ3S7IG25rPtX6uG2Gmi8QdpJbvfbvkMqk4aNbHveWm35lhsFpiJhu5ngUvb7RjZAVg9YRJGMufZwA5TKrr57fIKhA45QXxbITEP2gX" APP_SSO_SERVICEPROVIDER_PRIVATEKEY="MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMKCd0hnMKX40MYR+fZNRqMJjSiDpTPTkV9A0bfQKESZ9esPjNt8Janq+2MGLrm6cRcMXRx8yo/x7pfoCmdiu9D7VNhk69nFsNKH0PQp/jf2+vLPHXgKvlcCFvlaOB/Cvg9UnK9mq83H88LPwvrpaNRl4qDrLS5TTByEIohjFUJrAgMBAAECgYEAgLUgBTLzCABa9ZXTl12PDjc1xsdFu8OVgDg+DamZ27sc9Qv3Iw1FRuiMq/vdU1zBlITD4CPbTeDDBpWuvLainACpk4JJK22JozwLpaqnyrrhPNxphBe3XUREe6Tw53q9cM1j9RlD+PwbM2KbudfBmsi+sPvNK0pEAHFJZhogjfECQQDtwqhYQhLUCmgzMMFNU1PYvPJ6+5cdrgxK5JJhQxKJnclUdnjw3zUwdN3XpJk9ggq/GTCAjd/vE8ILV2DXgD6nAkEA0W5pvJx5EG9hekJ3/LaqcIKNH38uqhm4LPrXaLbUOToVyjBsJhlfRVVQojhOT9mAkTs4RhSP0IZy+Xkvh3s6nQJBALPzOnriN2HpJohoBEXEJZfLGjNerDc4ffFJIkke/K7Pj4uvx0V3ishMC4Ok/p6BCCUuqXkC6FQIvjrbPV6dn80CQQDRAZvMe2vmlwF0/fi436Ng/SjRkh+D6n7/hKaM/kj1g55TVdfYfeGyU95QxliBH9NLHQqgBc0wkb0Uc3iXgMeRAkAm30yjx2YPHjXZydKsJFgNtfI0PvoFS8tv1Ljb3FfflzrKEFFBtwfC/kxJXY+oKIKMSW0YxT0EuOkq3K5uIeGd" # THE SSO APP -APP_SSO_IDENTITYPROVIDER_X509CERT="MIIDXTCCAkWgAwIBAgIJALmVVuDWu4NYMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTYxMjMxMTQzNDQ3WhcNNDgwNjI1MTQzNDQ3WjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzUCFozgNb1h1M0jzNRSCjhOBnR+uVbVpaWfXYIR+AhWDdEe5ryY+CgavOg8bfLybyzFdehlYdDRgkedEB/GjG8aJw06l0qF4jDOAw0kEygWCu2mcH7XOxRt+YAH3TVHa/Hu1W3WjzkobqqqLQ8gkKWWM27fOgAZ6GieaJBN6VBSMMcPey3HWLBmc+TYJmv1dbaO2jHhKh8pfKw0W12VM8P1PIO8gv4Phu/uuJYieBWKixBEyy0lHjyixYFCR12xdh4CA47q958ZRGnnDUGFVE1QhgRacJCOZ9bd5t9mr8KLaVBYTCJo5ERE8jymab5dPqe5qKfJsCZiqWglbjUo9twIDAQABo1AwTjAdBgNVHQ4EFgQUxpuwcs/CYQOyui+r1G+3KxBNhxkwHwYDVR0jBBgwFoAUxpuwcs/CYQOyui+r1G+3KxBNhxkwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAAiWUKs/2x/viNCKi3Y6blEuCtAGhzOOZ9EjrvJ8+COH3Rag3tVBWrcBZ3/uhhPq5gy9lqw4OkvEws99/5jFsX1FJ6MKBgqfuy7yh5s1YfM0ANHYczMmYpZeAcQf2CGAaVfwTTfSlzNLsF2lW/ly7yapFzlYSJLGoVE+OHEu8g5SlNACUEfkXw+5Eghh+KzlIN7R6Q7r2ixWNFBC/jWf7NKUfJyX8qIG5md1YUeT6GBW9Bm2/1/RiO24JTaYlfLdKK9TYb8sG5B+OLab2DImG99CJ25RkAcSobWNF5zD0O6lgOo3cEdB/ksCq3hmtlC/DlLZ/D8CJ+7VuZnS1rR2naQ==" -APP_SSO_IDENTITYPROVIDER_ENTITYID="http://samltest.${BASE_DOMAIN}/simplesaml/saml2/idp/metadata.php" -APP_SSO_IDENTITYPROVIDER_LOGINURL="http://samltest.${BASE_DOMAIN}/simplesaml/saml2/idp/SSOService.php" -APP_SSO_IDENTITYPROVIDER_LOGOUTURL="http://samltest.${BASE_DOMAIN}/simplesaml/saml2/idp/SSOService.php" +APP_SSO_IDENTITYPROVIDER_X509CERT=MIIDXTCCAkWgAwIBAgIJALmVVuDWu4NYMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTYxMjMxMTQzNDQ3WhcNNDgwNjI1MTQzNDQ3WjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzUCFozgNb1h1M0jzNRSCjhOBnR+uVbVpaWfXYIR+AhWDdEe5ryY+CgavOg8bfLybyzFdehlYdDRgkedEB/GjG8aJw06l0qF4jDOAw0kEygWCu2mcH7XOxRt+YAH3TVHa/Hu1W3WjzkobqqqLQ8gkKWWM27fOgAZ6GieaJBN6VBSMMcPey3HWLBmc+TYJmv1dbaO2jHhKh8pfKw0W12VM8P1PIO8gv4Phu/uuJYieBWKixBEyy0lHjyixYFCR12xdh4CA47q958ZRGnnDUGFVE1QhgRacJCOZ9bd5t9mr8KLaVBYTCJo5ERE8jymab5dPqe5qKfJsCZiqWglbjUo9twIDAQABo1AwTjAdBgNVHQ4EFgQUxpuwcs/CYQOyui+r1G+3KxBNhxkwHwYDVR0jBBgwFoAUxpuwcs/CYQOyui+r1G+3KxBNhxkwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAAiWUKs/2x/viNCKi3Y6blEuCtAGhzOOZ9EjrvJ8+COH3Rag3tVBWrcBZ3/uhhPq5gy9lqw4OkvEws99/5jFsX1FJ6MKBgqfuy7yh5s1YfM0ANHYczMmYpZeAcQf2CGAaVfwTTfSlzNLsF2lW/ly7yapFzlYSJLGoVE+OHEu8g5SlNACUEfkXw+5Eghh+KzlIN7R6Q7r2ixWNFBC/jWf7NKUfJyX8qIG5md1YUeT6GBW9Bm2/1/RiO24JTaYlfLdKK9TYb8sG5B+OLab2DImG99CJ25RkAcSobWNF5zD0O6lgOo3cEdB/ksCq3hmtlC/DlLZ/D8CJ+7VuZnS1rR2naQ== +APP_SSO_IDENTITYPROVIDER_ENTITYID=${PROTOCOL}://samltest.${BASE_DOMAIN}/simplesaml/saml2/idp/metadata.php +APP_SSO_IDENTITYPROVIDER_LOGINURL=${PROTOCOL}://samltest.${BASE_DOMAIN}/simplesaml/saml2/idp/SSOService.php +APP_SSO_IDENTITYPROVIDER_LOGOUTURL=${PROTOCOL}://samltest.${BASE_DOMAIN}/simplesaml/saml2/idp/SSOService.php ###> symfony/mailer ### MAILER_DSN=smtp://mail:1025 MAIL_HOST=admin@mail.com +###< symfony/mailer ### \ No newline at end of file diff --git a/Makefile b/Makefile index 4bdbcd6c..6ec4acbb 100644 --- a/Makefile +++ b/Makefile @@ -88,6 +88,11 @@ restart: down up ## Soft Restart .PHONY: frestart frestart: fdown fup ## Hard restart + +.PHONY: fbuild +fbuild: ;\ + docker compose build --no-cache + .PHONY: stop-front stop-front: sync-env ## stop front container DOCKER_BUILDKIT=1 docker compose stop front diff --git a/apps/back/config/services.yaml b/apps/back/config/services.yaml index 89af18fc..ab3e1329 100644 --- a/apps/back/config/services.yaml +++ b/apps/back/config/services.yaml @@ -63,6 +63,7 @@ services: class: App\Authenticator\Saml2Authenticator arguments: $checkPath: 'api_login_saml2' + $returnTo: "%app.url.base%/api/1.0/auth/sso/saml2/login" OneLogin\Saml2\Auth: diff --git a/apps/back/src/Authenticator/Saml2Authenticator.php b/apps/back/src/Authenticator/Saml2Authenticator.php index 998c098e..814699f9 100644 --- a/apps/back/src/Authenticator/Saml2Authenticator.php +++ b/apps/back/src/Authenticator/Saml2Authenticator.php @@ -4,7 +4,6 @@ namespace App\Authenticator; -use App\Exception\SsoConsumerAuthNException; use App\Exception\SsoConsumerException; use OneLogin\Saml2\Auth; use Symfony\Component\HttpFoundation\JsonResponse; @@ -27,6 +26,8 @@ public function __construct( private readonly HttpUtils $httpUtils, private readonly string $checkPath, private readonly Auth $auth, + private readonly string $returnTo, + private readonly \Psr\Log\LoggerInterface $logger, ) { } @@ -43,12 +44,8 @@ public function supports(Request $request): bool|null public function authenticate(Request $request): Passport { $session = $request->getSession(); - $authNRequestId = $session->get('AuthNRequestID'); - if (! \is_string($authNRequestId)) { - throw new SsoConsumerAuthNException(); - } - - $auth = $this->auth; + $authNRequestId = $session->get('AuthNRequestID', null); + $auth = $this->auth; $auth->setStrict(false); $auth->processResponse($authNRequestId); $errors = $auth->getErrors(); @@ -97,11 +94,13 @@ public function onAuthenticationFailure(Request $request, AuthenticationExceptio /** @inheritDoc */ public function start(Request $request, AuthenticationException|null $authException = null) { - $session = $request->getSession(); - $auth = $this->auth; - $url = $auth->login(null, [], false, false, true); + $session = $request->getSession(); + $this->logger->debug('Starting auth'); + $auth = $this->auth; + $url = $auth->login($this->returnTo, [], false, false, true); $authNRequestId = $auth->getLastRequestID(); $session->set('AuthNRequestID', $authNRequestId); + $this->logger->debug("Need redirect to $url"); return new JsonResponse(['url' => $url], Response::HTTP_UNAUTHORIZED); } diff --git a/apps/front/nuxt.config.ts b/apps/front/nuxt.config.ts index 5411f88a..81563704 100644 --- a/apps/front/nuxt.config.ts +++ b/apps/front/nuxt.config.ts @@ -12,7 +12,7 @@ export default defineNuxtConfig({ // @see https://getbootstrap.com/docs/5.0/getting-started/introduction/#starter-template charset: "utf-8", viewport: "width=device-width, initial-scale=1", - title: "Boilerplate TCM v2", + title: "Boilerplate SF - Nuxt", meta: [ // // { name: 'description', content: 'My amazing site.' } diff --git a/apps/front/package.json b/apps/front/package.json index 092b52f2..a2ad2609 100644 --- a/apps/front/package.json +++ b/apps/front/package.json @@ -6,7 +6,7 @@ "generate": "nuxt generate", "preview": "nuxt preview", "postinstall": "nuxt prepare", - "lint": "eslint nuxt.config.ts --fix ; nuxi typecheck ; eslint ./src/" + "lint": "eslint nuxt.config.ts --fix ; nuxi typecheck && eslint ./src/" }, "devDependencies": { "@nuxt/eslint-config": "^0.1.1", diff --git a/apps/front/src/app.vue b/apps/front/src/app.vue index ab47ab58..7ac1bd75 100644 --- a/apps/front/src/app.vue +++ b/apps/front/src/app.vue @@ -1,7 +1,7 @@