src/Controller/MainController.php line 63
<?phpnamespace App\Controller;use App\AppHelper\Helper;use App\AppHelper\Settings;use App\Entity\AppSites;use App\Entity\EmailTemplates;use App\Entity\MediaCategory;use App\Entity\Mediathek;use App\Entity\SystemSettings;use App\Entity\User;use App\Entity\UserDetails;use App\MakeQrcode\ImageWithLogo;use chillerlan\QRCode\{QRCode, QROptions};use Doctrine\DBAL\Exception;use Doctrine\ORM\EntityManagerInterface;use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\BinaryFileResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\RequestStack;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpKernel\KernelInterface;use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Uid\Ulid;use Symfony\Component\Uid\UuidV1;use Symfony\Contracts\Translation\TranslatorInterface;use Ramsey\Uuid\Uuid;class MainController extends AbstractController{use Settings;private array $site_settings;public function __construct(private readonly EntityManagerInterface $em,private readonly KernelInterface $kernel,private RequestStack $requestStack,private readonly TranslatorInterface $translator,private readonly ImageWithLogo $imageWithLogo){$this->requestStack = $requestStack;$ss = $this->em->getRepository(SystemSettings::class)->getSettings('site_settings');if ($ss && isset($ss->record)) {$this->site_settings = $ss->record;} else {$this->site_settings = [];}}#[Route('/nelmio/csp/report', name: 'app_csp_report')]public function csp_report(Request $request): Response{return $this->render('main/404.html.twig', []);}#[Route('/', name: 'app_main')]public function index_main(Request $request, UserPasswordHasherInterface $passEncoder): Response{// dd($this->getParameter('projectDir'),$_SERVER, $this->getParameter('projectDir'));$this->imageWithLogo->make_qrcode_with_logo();// dd($result);// return new Response($result, 200, ['Content-Type' => 'image/png']);$uuid = new Ulid();//dd($uuid->toRfc4122());$locale = $request->getLocale();// $request->setLocale('de');$u = $this->em->getRepository(UserDetails::class)->findAll();if (!$u) {$this->set_default_settings($request, $passEncoder, $request->getUri());}$siteSettings = $this->em->getRepository(SystemSettings::class)->getSettings('site_settings');if (strtolower(php_uname('s')) == 'linux'){$dev = '> /dev/null 2>&1';} else {$dev = '';}$dirSrc = $this->getParameter('projectDir');$command = sprintf('php %s/bin/console league:oauth2-server:clear-expired-tokens %s', $dirSrc, $dev);passthru($command);return $this->render('main/index.html.twig', ['settings' => $siteSettings->record,'title' => $this->translator->trans('Homepage'),'testImg' => '']);}#[Route('/site/{slug}', name: 'site_slug')]public function get_public_site(Request $request): Response{$slug = $request->get('slug');$site = $this->em->getRepository(AppSites::class)->findOneBy(['site_slug' => $slug]);if (!$site) {return $this->render('main/404.html.twig', []);}return $this->render('main/public-site-by-slug.html.twig', ['title' => $site->getSiteTitle(),'site_slug' => $site->getSiteSlug(),'site_content' => html_entity_decode($site->getSiteContent()),'site_excerpt' => html_entity_decode($site->getSiteExcerpt()),'site_status' => $site->getSiteStatus(),'site_comment_status' => $site->isSiteCommentStatus(),'site_type' => $site->getSiteType(),'site_created' => $site->getCreatedAt(),]);}/*** @param $size* @param Request $request* @param Mediathek $mediathek* @return BinaryFileResponse|void*/#[Route('/media{id}/{size}', name: 'media_image')]public function get_media_file($size, Request $request, Mediathek $mediathek){$dtaType = $mediathek->getType();$filename = $mediathek->getBezeichnung();if ($dtaType == 'data') {$path = 'data';} else {$path = $size;}$file = $this->getParameter('uploads') . '/' . $path . '/' . $filename;if (is_file($file)) {return new BinaryFileResponse($file);}}#[Route('/dashboard', name: 'app_app_main')]#[IsGranted('ROLE_USER')]public function app_main(Request $request): Response{$hasAccess = $this->isGranted('ROLE_ADMIN');if ($hasAccess) {return $this->redirect($this->generateUrl('dashboard_app_dashboard'));}$hasAccess = $this->isGranted('ROLE_USER');if ($hasAccess) {return $this->redirect($this->generateUrl('app_profile_profile'));}return $this->redirect($this->generateUrl('app_main'));}/*** @throws Exception*/private function set_default_settings($request, $passEncoder, $uri): void{//TODO set default settings$defaultSettings = $this->get_app_default_settings();$ifSettings = $this->em->getRepository(SystemSettings::class)->findAll();if (!$ifSettings) {$settings = new SystemSettings();$settings->setSettingsId(SystemSettingsController::SETTINGS_ID);$settings->setEmailSettings(['data' => json_encode($defaultSettings['email_settings'])]);$settings->setUploadSettings(['data' => json_encode($defaultSettings['upload_settings'])]);$settings->setSiteSettings(['data' => json_encode($defaultSettings['site_settings'])]);$settings->setOauthServerSettings(['data' => json_encode($defaultSettings['oauth_server_settings'])]);$settings->setHeader(['data' => json_encode($defaultSettings['header'])]);$this->em->persist($settings);$this->em->flush();}$isMediaCat = $this->em->getRepository(MediaCategory::class)->findAll();if (!$isMediaCat) {$mediaCat = new MediaCategory();$mediaCat->setPosition(0);$mediaCat->setBezeichnung('Allgemein');$mediaCat->setDescription('Allgemeine Kategorie');$mediaCat->setFirstCat(1);$this->em->persist($mediaCat);$this->em->flush();}$helper = Helper::instance();$tempDir = $this->getParameter('email_templates_dir');$eTemplates = ['0' => ['bezeichnung' => 'Aktivierungslink','subject' => 'Konto aktivieren','type' => 'system','content' => htmlspecialchars($helper->replace_template(file_get_contents($tempDir . 'aktivierungslink.html'))),'position' => 1],'1' => ['bezeichnung' => 'Link zum Passwort erstellen','subject' => 'Passwort erstellen','type' => 'system','content' => htmlspecialchars($helper->replace_template(file_get_contents($tempDir . 'link-zum-pw-erstellen.html'))),'position' => 2],'2' => ['bezeichnung' => 'E-Mail geändert (Bestätigung)','subject' => 'E-Mail bestätigen','type' => 'system','content' => htmlspecialchars($helper->replace_template(file_get_contents($tempDir . 'email-change.html'))),'position' => 3],'3' => ['bezeichnung' => 'Passwort vergessen','subject' => 'neues Passwort erstellen','type' => 'system','content' => htmlspecialchars($helper->replace_template(file_get_contents($tempDir . 'passwort-vergessen.html'))),'position' => 4],'4' => ['bezeichnung' => 'Signatur','subject' => 'Signatur','type' => 'signature','content' => htmlspecialchars($helper->replace_template(file_get_contents($tempDir . 'signature-default.html'))),'position' => 5],'5' => ['bezeichnung' => 'Autoresponder','subject' => 'Automatische Antwort','type' => 'responder','content' => 'Autoresponder','position' => 6],];$isEmailTemplate = $this->em->getRepository(EmailTemplates::class)->findAll();if (!$isEmailTemplate) {foreach ($eTemplates as $tmp) {$emailTemplate = new EmailTemplates();$emailTemplate->setBezeichnung($tmp['bezeichnung']);$emailTemplate->setType($tmp['type']);$emailTemplate->setSubject($tmp['subject']);$emailTemplate->setContent($tmp['content']);$emailTemplate->setPosition($tmp['position']);$this->em->persist($emailTemplate);$this->em->flush();}}$uuid = new Ulid();$id = $uuid->toBase32();$clientId = $helper->generate_identifier($id);//$clientId = $helper->generate_callback_pw(32,0,16);//Todo set SU-Admin$suUserDetails = new UserDetails();$suUserDetails->setRegisterIp($request->getClientIp());$suUserDetails->setChangePw(true);$suUserDetails->setAktiv(true);$suUserDetails->setMustValidated(0);$this->em->persist($suUserDetails);$this->em->flush();$uuid1 = Uuid::uuid1();$suUser = new User();$suUser->setRoles(['ROLE_ADMIN', 'ROLE_SUPER_ADMIN']);$suUser->setPassword($passEncoder->hashPassword($suUser, $this->su_administrator_passwort));$suUser->setUserdetails($suUserDetails);$suUser->setEmail($this->su_administrator_email);$suUser->setUuid(new UuidV1());$this->em->persist($suUser);$this->em->flush($suUser);// Todo Set oAuth2$clientSecret = $helper->generate_callback_pw(128, 0, 64);$scopes = ['SUPER_USER'];$grantTypes = ['authorization_code', 'refresh_token', 'client_credentials'];$redirectUris = ['http://localhost:8080/callback', $uri . 'intern-callback'];$conn = $this->em->getConnection();$conn->insert('oauth2_client', ['identifier' => $clientId,'secret' => $clientSecret,'name' => $suUser->getEmail(),'redirect_uris' => implode(' ',$redirectUris),'grants' => implode(' ', $grantTypes),'scopes' => implode(' ', $scopes),'active' => 1,'allow_plain_text_pkce' => 0,]);$uuid = new Ulid();$id = $uuid->toBase32();$clientId = $helper->generate_identifier($id);//$clientId = $helper->generate_callback_pw(32,0,16);//Todo set Admin$userDetails = new UserDetails();$userDetails->setRegisterIp($request->getClientIp());$userDetails->setChangePw(true);$userDetails->setAktiv(true);$userDetails->setMustValidated(0);$this->em->persist($userDetails);$this->em->flush();$uuid1 = Uuid::uuid1();$user = new User();$user->setRoles(['ROLE_ADMIN']);$user->setPassword($passEncoder->hashPassword($user, $this->administrator_passwort));$user->setUserdetails($userDetails);$user->setEmail($this->administrator_email);$user->setUuid(new UuidV1());$this->em->persist($user);$this->em->flush($user);// Todo Set oAuth2$clientSecret = $helper->generate_callback_pw(128, 0, 64);$scopes = ['ADMIN'];//$redirectUris = ['http://localhost:8080/callback', $uri . 'intern-callback'];$conn = $this->em->getConnection();$conn->insert('oauth2_client', ['identifier' => $clientId,'secret' => $clientSecret,'name' => $user->getEmail(),'redirect_uris' => implode(' ', $redirectUris),'grants' => implode(' ', $grantTypes),'scopes' => implode(' ', $scopes),'active' => 1,'allow_plain_text_pkce' => 0,]);}public function get_public_pages($id = NULL): array{$public = ['0' => ['id' => 1,'route_name' => '_public_agb','route' => '/agb','template' => 'agb.html.twig','name' => $this->translator->trans('AGB')],'1' => ['id' => 2,'route_name' => '_public_impressum','route' => '/impressum','template' => 'impressum.html.twig','name' => $this->translator->trans('Imprint')],'2' => ['id' => 3,'route_name' => '_public_datenschutz','route' => '/datenschutz','template' => 'datenschutz.html.twig','name' => $this->translator->trans('Privacy')],];if ($id) {foreach ($public as $tmp) {if ($tmp['id'] == $id) {return $tmp;}}}return $public;}}