api & scribetoninegate
This commit is contained in:
parent
87604176b2
commit
68dd1874d0
|
@ -0,0 +1,330 @@
|
|||
<?php
|
||||
namespace Cadoles\CoreBundle\Command;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Question\ConfirmationQuestion;
|
||||
use Symfony\Component\Console\Input\ArrayInput;
|
||||
|
||||
use Cadoles\CoreBundle\Entity\User;
|
||||
use Cadoles\CoreBundle\Entity\Group;
|
||||
use Cadoles\CoreBundle\Entity\UserGroup;
|
||||
|
||||
class ScribeToNinegateCommand extends Command
|
||||
{
|
||||
private $container;
|
||||
private $em;
|
||||
private $output;
|
||||
private $connection;
|
||||
private $host;
|
||||
private $port;
|
||||
private $pwd;
|
||||
private $user;
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setName('Core:ScribeToNinegate')
|
||||
->setDescription('Récupére un annuaire Scribe et le transforme en donnée Ninegate')
|
||||
->setHelp('Récupére un annuaire Scribe et le transforme en donnée Ninegate')
|
||||
->addArgument('host', InputArgument::REQUIRED, 'host du ldap scribe')
|
||||
->addArgument('pwd', InputArgument::REQUIRED, 'pwd du compte cn=admin,o=gouv,c=fr')
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$this->container = $this->getApplication()->getKernel()->getContainer();
|
||||
$this->em = $this->container->get('doctrine')->getEntityManager();
|
||||
$this->output = $output;
|
||||
|
||||
// Récupérer les parametres
|
||||
$this->host = $input->getArgument('host');
|
||||
$this->port = 389;
|
||||
$this->pwd = $input->getArgument('pwd');
|
||||
$this->user = "cn=admin,o=gouv,c=fr";
|
||||
|
||||
$ldap_basedn = $this->container->getParameter('ldap_basedn');
|
||||
$ldap_username = $this->container->getParameter('ldap_username');
|
||||
$ldap_firstname = $this->container->getParameter('ldap_firstname');
|
||||
$ldap_lastname = $this->container->getParameter('ldap_lastname');
|
||||
$ldap_email = $this->container->getParameter('ldap_email');
|
||||
$ldap_usersadmin = $this->container->getParameter('ldap_usersadmin');
|
||||
$fieldstoread = array($ldap_username,$ldap_firstname,$ldap_lastname,$ldap_email,"userPassword");
|
||||
|
||||
if(!$this->connect()) {
|
||||
$this->writelnred("IMPOSSIBLE DE SE CONNECTER A L'ANNUAIRE SCRIBE");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// On arrive à se connecter à l'annuaire du scribe
|
||||
$this->writeln("CONNEXION A L'ANNUAIRE SCRIBE");
|
||||
|
||||
// Attention confirmation
|
||||
$this->writeln('');
|
||||
$this->writelnred('ATTENTION');
|
||||
$this->writelnred('En confirmant vous allez totalement réinitialiser votre Ninegate');
|
||||
$helper = $this->getHelper('question');
|
||||
$question = new ConfirmationQuestion('Souhaitez-vous poursuivre (yes/no)?', false);
|
||||
if (!$helper->ask($input, $output, $question)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
$this->writelnred('');
|
||||
$this->writelnred('== PURGE');
|
||||
|
||||
$this->writelnred('PURGE DES CONFIG');
|
||||
$this->purge('CadolesCoreBundle:Config');
|
||||
$this->purge('CadolesCoreBundle:Script');
|
||||
$this->purge('CadolesCoreBundle:Statistic');
|
||||
$this->purge('CadolesCoreBundle:Whitelist');
|
||||
|
||||
$this->writelnred('PURGE DES ITEMS');
|
||||
$this->purge('CadolesPortalBundle:Item');
|
||||
$this->purge('CadolesPortalBundle:Itemcategory');
|
||||
|
||||
$this->writelnred('PURGE DES BOOKMARKS');
|
||||
$this->purge('CadolesPortalBundle:Bookmark');
|
||||
|
||||
$this->writelnred('PURGE DES ALERTES');
|
||||
$this->purge('CadolesPortalBundle:Alert');
|
||||
$this->purge('CadolesPortalBundle:Alertcategory');
|
||||
|
||||
$this->writelnred('PURGE DES NOTICE');
|
||||
$this->purge('CadolesPortalBundle:Notice');
|
||||
|
||||
$this->writelnred('PURGE DES CALENDAR');
|
||||
$this->purge('CadolesPortalBundle:Calendar');
|
||||
|
||||
$this->writelnred('PURGE DES FLUX');
|
||||
$this->purge('CadolesPortalBundle:Flux');
|
||||
|
||||
$this->writelnred('PURGE DES BLOG');
|
||||
$this->purge('CadolesPortalBundle:Blog');
|
||||
|
||||
$this->writelnred('PURGE DES PAGES');
|
||||
$this->purge('CadolesPortalBundle:Page');
|
||||
|
||||
$this->writelnred('PURGE DES PROJECT');
|
||||
$this->purge('CadolesPortalBundle:Project');
|
||||
|
||||
$this->writelnred('PURGE DES UTILISATEURS');
|
||||
$this->purge('CadolesCoreBundle:User');
|
||||
|
||||
$this->writelnred('PURGE DES INSCRIPTIONS');
|
||||
$this->purge('CadolesCoreBundle:Registration');
|
||||
|
||||
$this->writelnred('PURGE DES GROUPES');
|
||||
$this->purge('CadolesCoreBundle:Group');
|
||||
|
||||
$this->writelnred('PURGE DES NIVEAU 02');
|
||||
$this->purge('CadolesCoreBundle:Niveau02');
|
||||
|
||||
$this->writelnred('PURGE DES NIVEAU 01');
|
||||
$this->purge('CadolesCoreBundle:Niveau01');
|
||||
|
||||
$this->writelnred('PURGE DES ICONES');
|
||||
$this->purge('CadolesPortalBundle:Icon');
|
||||
|
||||
|
||||
$this->writeln('');
|
||||
|
||||
|
||||
$this->writelnred('');
|
||||
$this->writelnred('== INIT DATA');
|
||||
$command = $this->getApplication()->find("Core:InitData");
|
||||
$parameter = new ArrayInput([]);
|
||||
$command->run($parameter, $output);
|
||||
|
||||
$command = $this->getApplication()->find("Cron:InitData");
|
||||
$parameter = new ArrayInput([]);
|
||||
$command->run($parameter, $output);
|
||||
|
||||
$command = $this->getApplication()->find("Portal:InitData");
|
||||
$parameter = new ArrayInput([]);
|
||||
$command->run($parameter, $output);
|
||||
|
||||
$command = $this->getApplication()->find("Core:Script");
|
||||
$parameter = new ArrayInput([]);
|
||||
$command->run($parameter, $output);
|
||||
|
||||
|
||||
$this->writelnred('');
|
||||
$this->writelnred('== USERS SCRIBE TO USERS NINEGATE');
|
||||
$niveau01=$this->em->getRepository('CadolesCoreBundle:Niveau01')->find(-100);
|
||||
$niveau01->setSiren("");
|
||||
$this->em->persist($niveau01);
|
||||
$this->em->flush();
|
||||
|
||||
$scribeusers = $this->search("(&(uid=*)(mail=*)(objectClass=person)(!(description=Computer)))", $fieldstoread, $ldap_basedn);
|
||||
foreach($scribeusers as $scribeuser) {
|
||||
if($scribeuser[$ldap_email]=="") {
|
||||
$this->writelnred("Compte sans mail = ".$scribeuser[$ldap_username]." ".$scribeuser[$ldap_email]);
|
||||
continue;
|
||||
}
|
||||
$user=$this->em->getRepository('CadolesCoreBundle:User')->findOneBy(array('email' => $scribeuser[$ldap_email]));
|
||||
if($user&&$user->getUsername()!=$scribeuser[$ldap_username]) {
|
||||
$this->writelnred("EMAIL en double = ".$scribeuser[$ldap_username]." ".$scribeuser[$ldap_email]);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
$this->writeln($scribeuser[$ldap_username]." ".$scribeuser[$ldap_email]);
|
||||
$user=$this->em->getRepository('CadolesCoreBundle:User')->findOneBy(array('username' => $scribeuser[$ldap_username]));
|
||||
if(!$user) {
|
||||
$user = new User();
|
||||
$user->setUsername($scribeuser[$ldap_username]);
|
||||
}
|
||||
|
||||
$user->setLastname($scribeuser[$ldap_lastname]);
|
||||
$user->setFirstname($scribeuser[$ldap_firstname]);
|
||||
$user->setEmail($scribeuser[$ldap_email]);
|
||||
$user->setNiveau01($niveau01);
|
||||
$user->setSiren($niveau01->getSiren());
|
||||
$user->setPasswordDirect($scribeuser["userpassword"]);
|
||||
$user->setSalt(uniqid(mt_rand(), true));
|
||||
$user->setVisible(true);
|
||||
$user->setAuthlevel("simple");
|
||||
$user->setBelongingpopulation("agent");
|
||||
|
||||
if(in_array($scribeuser[$ldap_username],$ldap_usersadmin))
|
||||
$user->setRole("ROLE_ADMIN");
|
||||
else
|
||||
$user->setRole("ROLE_USER");
|
||||
|
||||
$this->em->persist($user);
|
||||
$this->em->flush();
|
||||
}
|
||||
|
||||
$this->writelnred('');
|
||||
$this->writelnred('== USERS SCRIBE TO USERS NINEGATE');
|
||||
$scribegroups = $this->search("(objectClass=posixGroup)", ["cn","memberuid"], $ldap_basedn);
|
||||
$exludgroupe=["DomainAdmins","DomainUsers","DomainComputers","PrintOperators","eleves","professeurs"];
|
||||
foreach($scribegroups as $scribegroup) {
|
||||
if(in_array($scribegroup["cn"],$exludgroupe)) continue;
|
||||
|
||||
$this->writeln($scribegroup["cn"]);
|
||||
$group=$this->em->getRepository('CadolesCoreBundle:Group')->findOneBy(array('label' => $scribegroup["cn"]));
|
||||
if(!$group) {
|
||||
$group = new Group();
|
||||
$group->setLabel($scribegroup["cn"]);
|
||||
}
|
||||
|
||||
$group->setFgcanshare(false);
|
||||
$group->setFgcancreatepage(false);
|
||||
$group->setFgcancreateblog(false);
|
||||
$group->setFgcancreatecalendar(false);
|
||||
$group->setFgcancreateproject(false);
|
||||
$group->setFgopen(false);
|
||||
$group->setFgall(false);
|
||||
$group->setFgtemplate(false);
|
||||
$this->em->persist($group);
|
||||
$this->em->flush();
|
||||
|
||||
if(array_key_exists("memberuid",$scribegroup))
|
||||
{
|
||||
if(!is_array($scribegroup["memberuid"]))
|
||||
$scribegroup["memberuid"] = [ $scribegroup["memberuid"] ];
|
||||
}
|
||||
else
|
||||
$scribegroup["memberuid"] = [];
|
||||
|
||||
|
||||
foreach($scribegroup["memberuid"] as $scribemember) {
|
||||
$user=$this->em->getRepository('CadolesCoreBundle:User')->findOneBy(array('username' => $scribemember));
|
||||
if($user) {
|
||||
$member=$this->em->getRepository('CadolesCoreBundle:UserGroup')->findOneBy(array('group' => $group, 'user' => $user));
|
||||
if(!$member) {
|
||||
$member= new UserGroup();
|
||||
$member->setGroup($group);
|
||||
$member->setUser($user);
|
||||
|
||||
$this->em->persist($member);
|
||||
$this->em->flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
private function purge($entityname) {
|
||||
$entitys=$this->em->getRepository($entityname)->findAll();
|
||||
foreach ($entitys as $entity) {
|
||||
$this->em->remove($entity);
|
||||
}
|
||||
$this->em->flush();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private function connect() {
|
||||
if($this->connection){
|
||||
return $this->connection;
|
||||
} else {
|
||||
$ldapConn = ldap_connect($this->host, $this->port);
|
||||
if($ldapConn){
|
||||
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);
|
||||
if(ldap_bind( $ldapConn, $this->user, $this->pwd)){
|
||||
$this->connection = $ldapConn;
|
||||
return $this->connection;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function search($filter, $attributes = array(), $subBranch = '') {
|
||||
$connection = $this->connect();
|
||||
$branch = ($subBranch ? $subBranch : $this->baseDN);
|
||||
$result = ldap_search($connection, $branch, $filter, $attributes,0,0,0);
|
||||
if(!$result) {
|
||||
$this->ldapError();
|
||||
}
|
||||
return $this->resultToArray($result);
|
||||
}
|
||||
|
||||
private function resultToArray($result){
|
||||
|
||||
$connection = $this->connect();
|
||||
$resultArray = array();
|
||||
|
||||
if($result){
|
||||
$entry = ldap_first_entry($connection, $result);
|
||||
while ($entry){
|
||||
$row = array();
|
||||
$attr = ldap_first_attribute($connection, $entry);
|
||||
while ($attr){
|
||||
$val = ldap_get_values_len($connection, $entry, $attr);
|
||||
if(array_key_exists('count', $val) AND $val['count'] == 1){
|
||||
$row[strtolower($attr)] = $val[0];
|
||||
} else {
|
||||
$row[strtolower($attr)] = $val;
|
||||
}
|
||||
$attr = ldap_next_attribute($connection, $entry);
|
||||
}
|
||||
$resultArray[] = $row;
|
||||
$entry = ldap_next_entry($connection, $entry);
|
||||
}
|
||||
}
|
||||
|
||||
return $resultArray;
|
||||
}
|
||||
|
||||
public function ldapError(){
|
||||
$connection = $this->connect();
|
||||
throw new \Exception(
|
||||
'Error: ('. ldap_errno($connection) .') '. ldap_error($connection)
|
||||
);
|
||||
}
|
||||
|
||||
private function writelnred($string) {
|
||||
$this->output->writeln('<fg=red>'.$string.'</>');
|
||||
}
|
||||
private function writeln($string) {
|
||||
$this->output->writeln($string);
|
||||
}
|
||||
}
|
|
@ -213,6 +213,10 @@ class SynchroCommand extends Command
|
|||
$result[$ldap_username]=utf8_encode($result[$ldap_username]);
|
||||
if(!isset($result[$ldap_lastname])) $result[$ldap_lastname] = "";
|
||||
if(!isset($result[$ldap_firstname])) $result[$ldap_firstname] = "";
|
||||
if(!array_key_exists($ldap_email,$result)) {
|
||||
$this->writelnred(" - Création dans Bundle impossible >> ".$result[$ldap_username]." sans email");
|
||||
continue;
|
||||
}
|
||||
$result[$ldap_email]=strtolower($result[$ldap_email]);
|
||||
$result[$ldap_email]=utf8_encode($result[$ldap_email]);
|
||||
|
||||
|
|
|
@ -67,6 +67,23 @@ class TestRestCommand extends Command
|
|||
$this->writeln('');
|
||||
return 1;
|
||||
|
||||
// rest/alert/hide
|
||||
// Cache une alert à un utilisateur
|
||||
// key = parametre obligatoire
|
||||
// key = clé d'accès de l'api
|
||||
// login = parametre obligatoire
|
||||
// login = uid de l'utilisateur sur lequel on souhaite ajouter un bookmark
|
||||
// idalert = parametre obligatoire
|
||||
// idalert = id de l'alert à chacher
|
||||
$apiurl = $url."/rest/alert/hide";
|
||||
$this->writeln($apiurl);
|
||||
$response = \Unirest\Request::post($apiurl,$headers,["key"=>$masterapikey,"login"=>"admin","idalert"=>2]);
|
||||
$idbookmark=$response->body;
|
||||
dump($response->body);
|
||||
|
||||
|
||||
|
||||
|
||||
// rest/bookmark/add
|
||||
// Ajout d'un item ninegate existant comme bookmark d'un utilisateur
|
||||
// key = parametre obligatoire
|
||||
|
|
|
@ -152,6 +152,7 @@ class RestController extends Controller
|
|||
$tmp["order"] = $alert->getRoworder();
|
||||
$tmp["category"] = $alert->getAlertcategory()->getId();
|
||||
$tmp["description"] = $alert->getContent();
|
||||
$tmp["fghideable"] = $alert->getFghideable();
|
||||
|
||||
array_push($output["alerts"],$tmp);
|
||||
}
|
||||
|
@ -349,6 +350,65 @@ class RestController extends Controller
|
|||
return new Response(json_encode($output), 200);
|
||||
}
|
||||
|
||||
|
||||
// rest/alert/hide
|
||||
// Cache une alert à un utilisateur
|
||||
// key = parametre obligatoire
|
||||
// key = clé d'accès de l'api
|
||||
// login = parametre obligatoire
|
||||
// login = uid de l'utilisateur sur lequel on souhaite ajouter un bookmark
|
||||
// idalert = parametre obligatoire
|
||||
// idalert = id de l'alert à chacher
|
||||
public function alerthideAction(Request $request) {
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
||||
$key=$request->get('key');
|
||||
$login=$request->get('login');
|
||||
$idalert=$request->get('idalert');
|
||||
|
||||
// Vérification de la clé
|
||||
$realkey = $this->getParameter("apikeyninegate");
|
||||
if($key!=$realkey) {
|
||||
$output["error"]="error key";
|
||||
return new Response(json_encode($output), 400);
|
||||
}
|
||||
|
||||
// Tester présence des parametres
|
||||
if(is_null($login)||is_null($idalert)) {
|
||||
$output["error"]="missing parameter : login - idalert";
|
||||
return new Response(json_encode($output), 400);
|
||||
}
|
||||
|
||||
// Tester l'existance du login
|
||||
$user=$em->getRepository('CadolesCoreBundle:User')->findOneBy(["username"=>$login]);
|
||||
if(!$user) {
|
||||
$output["error"]="user not exist";
|
||||
return new Response(json_encode($output), 400);
|
||||
}
|
||||
|
||||
// Tester l'existance de l'alert
|
||||
$alert=$em->getRepository('CadolesPortalBundle:Alert')->find($idalert);
|
||||
if(!$alert) {
|
||||
$output["error"]="alert not exist";
|
||||
return new Response(json_encode($output), 400);
|
||||
}
|
||||
|
||||
// Tester que l'alert est masquable
|
||||
if(!$alert->getFghideable()) {
|
||||
$output["error"]="alert not hideable";
|
||||
return new Response(json_encode($output), 400);
|
||||
}
|
||||
|
||||
// Masquer l'alert
|
||||
if(!$alert->getReaders()->contains($user)) {
|
||||
$alert->addReader($user);
|
||||
$em->persist($alert);
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
$output=[];
|
||||
return new Response(json_encode($output), 200);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -536,3 +536,7 @@ cadoles_core_rest_bookmark_add:
|
|||
cadoles_core_rest_bookmark_del:
|
||||
path: /rest/bookmark/del
|
||||
defaults: { _controller: CadolesCoreBundle:Rest:bookmarkdel }
|
||||
|
||||
cadoles_core_rest_alert_hide:
|
||||
path: /rest/alert/hide
|
||||
defaults: { _controller: CadolesCoreBundle:Rest:alerthide }
|
Loading…
Reference in New Issue