191 lines
6.2 KiB
PHP
191 lines
6.2 KiB
PHP
<?php
|
|
|
|
namespace OCA\Agency\AppInfo;
|
|
|
|
use OCP\User\Events\UserChangedEvent;
|
|
use OCP\User\Events\BeforeUserLoggedOutEvent;
|
|
use OCP\EventDispatcher\IEventDispatcher;
|
|
use OCP\AppFramework\App;
|
|
use OCP\IUserSession;
|
|
use OCP\AppFramework\Controller;
|
|
use OCP\IRequest;
|
|
|
|
use OCP\User\Events\PostLoginEvent;
|
|
|
|
use OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent;
|
|
|
|
use OCP\Files\Events\Node\BeforeNodeDeletedEvent;
|
|
|
|
|
|
class Application extends App {
|
|
|
|
protected $AppName = 'Agency';
|
|
|
|
public function __construct() {
|
|
parent::__construct($this->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);
|
|
}
|
|
} |