AppName); $dispatcher = $this->getContainer()->query(IEventDispatcher::class); # Adding the Pre-Logout-Event for logging a User out of Django when user is atempt to logout from the cloud $dispatcher->addServiceListener(BeforeUserLoggedOutEvent::class, LogoutByNC::class); # Adding the Event, that User has Changed - update the logged User by Django. Works only by personal informations of the User! $dispatcher->addServiceListener(UserChangedEvent::class, UserChangedByNC::class); # Checking, if a user logged in in Django and which user is logged in in Django. $dispatcher->addServiceListener(BeforeTemplateRenderedEvent::class, LoginByNC::class); # Event before a File is deletet $dispatcher->addServiceListener(BeforeNodeDeletedEvent::class, DeleteNCFileDjango::class); } } /* A File is ready to be deleted in NC, before that happens delete the File in Django and remove it from addedfiles_nc in standards */ class DeleteNCFileDjango extends Controller { protected $session; private $nclink = 'https://daprd1.digitale-agentur.com'; //private $nclink = 'http://host.docker.internal:8000'; public function __construct(string $AppName, IRequest $request, IUserSession $session) { parent::__construct($AppName, $request); $this->session = $session; } public function handle(BeforeNodeDeletedEvent $event): void { $opts = [ "http" => array( "method" => "GET", "header" => "" ), "ssl"=> array( "verify_peer"=>false, "verify_peer_name"=>false, ), ]; $context = stream_context_create($opts); $file = file_get_contents($this->nclink.'/api/deletefile/'.$event->getNode()->getId().'/87zuhjk87GHJ546tzgvhas76aaskbdhr45edfVHAKia87s6gbAVGFGSR3451627gBHAKJBN', false, $context); } } /* User logged in, save Session-ID and login the User in Django */ class LoginByNC extends Controller { protected $session; protected $request; private $nclink = 'https://daprd1.digitale-agentur.com'; //private $nclink = 'http://host.docker.internal:8000'; public function __construct(string $AppName, IRequest $request, IUserSession $session) { $this->request = $request; parent::__construct($AppName, $request); $this->session = $session; } private function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; } return $randomString; } # Trigger in Django that the User changed public function handle(BeforeTemplateRenderedEvent $event): void { $postdata = http_build_query( array( 'uid' => $this->request->getCookie('nc_username'), 'sid' => $this->request->getCookie('nc_session_id') ) ); $opts = [ "ssl"=> array( "verify_peer"=>false, "verify_peer_name"=>false, ), "http" => array( "method" => "POST", "header" => "", "content" => $postdata ) ]; $context = stream_context_create($opts); $file = file_get_contents($this->nclink.'/api/setlog/', false, $context); } } /* CHANGED USER IN DJANGO BY NC */ class UserChangedByNC extends Controller { protected $session; protected $request; private $nclink = 'https://daprd1.digitale-agentur.com'; //private $nclink = 'http://host.docker.internal:8000'; public function __construct(string $AppName, IRequest $request, IUserSession $session) { $this->request = $request; parent::__construct($AppName, $request); $this->session = $session; } # Trigger in Django that the User changed public function handle(UserChangedEvent $event): void { $opts = [ "http" => array( "method" => "GET", "header" => "" ), "ssl"=> array( "verify_peer"=>false, "verify_peer_name"=>false, ), ]; if($this->session->getUser() != null){ $context = stream_context_create($opts); $file = file_get_contents($this->nclink.'/api/uschanged/'.$this->session->getUser()->getUID().'/'.$this->request->getCookie('nc_session_id'), false, $context); } } } /* LOGOUT DJANGO BY NC Diese Klasse wird erzeugt, wenn das Evenet BeforeUserLoggedOutEvent getriggert wird. Dann wird der User über die Django-API ausgeloggt! */ class LogoutByNC extends Controller { protected $session; private $nclink = 'https://daprd1.digitale-agentur.com'; //private $nclink = 'http://host.docker.internal:8000'; public function __construct(string $AppName, IRequest $request, IUserSession $session) { parent::__construct($AppName, $request); $this->session = $session; } # Logout the user! public function handle(BeforeUserLoggedOutEvent $event): void { $opts = [ "http" => array( "method" => "GET", "header" => "" ), "ssl"=> array( "verify_peer"=>false, "verify_peer_name"=>false, ), ]; $context = stream_context_create($opts); $file = file_get_contents($this->nclink.'/api/logout/'.$this->session->getUser()->getUID(), false, $context); } }