Home Developers G SUITE I – GESTIÓN OU’s/Grupos/Cuentas CON LA API DE PHP

G SUITE I – GESTIÓN OU’s/Grupos/Cuentas CON LA API DE PHP

by José Luis Sánchez Borque
google

Empezaré comentado que una de las principales caracteristicas de casi cualqueir producto es la de disponer de API’s en diferentes lenguajes de programación, para poder diseñar nuestras propias aplicaciones.

Un ejemplo concreto en la plataforma G Suite. En concreto la posiblidad mediante php de acceder a todo el entorno G Suite para poder gestionarlo. En mi caso, la idea era poder diseñar una aplicación que agilizara el proceso de alta, bajas, cambio de cursos, etc de una escuela.

G Suite, como ocurre con Office 365, dispone de mecanismos de importación csv para subir Unidades Organizativas, grupos, usuarios, etc, pero dicha metodología no proporciona una lógica adecuada de funcionamiento. Por ejemplo, os añado algunos casos sobre el planteamiento incial ( solo unos pocos, no todos los que están hecho):

  1. Dar de alta todos los nuevos usuarios matriculados en el colegio, teniendo en cuenta la generación de un correo electrónico en función de su nombre y apellidos, controlando la posible repetición de mails que se pueden producir.
  2. Paso de curso de los alumnos, asignándolos a los diferentes grupos y OU’s que ya existen
  3. Poder subir de forma automática las fotos de todos los usuarios
  4. Pequeño cuadro de control para secretaría que permita gestionar el día a a día de los alumnos sin necesidad de recurir al departamento IT

En definitiva, un montón de procedimientos que de no estar automatizados implican mucho tiempo cada año para una correcta gestión de todos los usuarios de una escuela.

Cuando me plantearon el proyecto uno piensa que es tan sencillo como buscar en google y encontrar miles de líneas de código que simplemente adaptando sería suficiente para ir desarrollando lo que nos habíamos propuesto. Nada más lejos de la realidad. NO encontré, al menos para PHP,  casi nada de información útil al respecto. Vamos, que casi me sale el “..no items found…“.

Bien la verdad que hay mucha tela que contar, y que iré soltanto en diferentes Post…

Empezaré por algunos links que me han dado la vida… Tres enlaces, que junto con el del propio cliente php son la clave:

OS recomiendo que los tengáis bien a mano, ya que son de consulta obligatoria.

Dejaremos para otros Post como instalar el cliente PHP e inicializar el proyecto junto con la generación del fichero json necesarios para el código. Si alguno tiene prisa puede ponerse en contacto conmigo y le indicaré cómo hacerlo.

Así que al grano… pongamos algún ejemplo

Listado de TODOS los usuarios del dominio bajo

<?php

require_once 'vendor/autoload.php';

define('APPLICATION_NAME', 'Proves');
define('SCOPES', implode(' ', array(
Google_Service_Directory::ADMIN_DIRECTORY_USER,
Google_Service_Directory::ADMIN_DIRECTORY_ORGUNIT,
Google_Service_Directory::ADMIN_DIRECTORY_USERSCHEMA
)));

//$authJson = '/var/www/html/proves.json';

putenv('GOOGLE_APPLICATION_CREDENTIALS=/var/www/html/proves.json');
date_default_timezone_set("Europe/Madrid");

$user = "cuenta@dominio.com";

$client = new Google_Client();
$client->useApplicationDefaultCredentials(); 
$client->setApplicationName(APPLICATION_NAME);
$client->setScopes(SCOPES); 
$client->setAccessType("offline");
$client->setSubject($user);

$service = new Google_Service_Directory($client);

$txtQuery = "orgUnitPath='/'";
$optParams = array(
'domain' => 'dominio.com', 
'maxResults' => 200, 
'query' => $txtQuery,
'orderBy' => 'email',
projection => 'full'
);

$i = 1;
do {
 $results = $service->users->listUsers($optParams); 
 $nextPage = $results["nextPageToken"];
 foreach ($results as $value) {
  $tmp =$value["customSchemas"];
  echo "(". $i. ") ". $value['primaryEmail']." - " . $value["orgUnitPath"]."<br>";
  $i = $i +1;
 }
 $optParams["pageToken"] = $nextPage;
} while (isset($nextPage));

?>

Función SuspenderUsuario para Activar/Desactivar una cuenta de usuario

function SuspenderUsuario($mail,$accion) {
/* 
 Bloquea el correo del usuario
 
 Parámetros:
 ===========
  - Primary mail del usuario en cuestión
  - $accion = TRUE para bloquealo, FALSE para desbloquearlo
 Devuelve
 ========
  - Ok si todo ok
  - El texto del error del sistema si hay algún tipo de error
*/

define('APPLICATION_NAME', 'Proves');
define('SCOPES', implode(' ', array(
Google_Service_Directory::ADMIN_DIRECTORY_USER,
Google_Service_Directory::ADMIN_DIRECTORY_USERSCHEMA
)));

putenv('GOOGLE_APPLICATION_CREDENTIALS=/var/www/html/proves.json');
date_default_timezone_set("Europe/Madrid"); 

$user = "cuenta@dominio.com";

$client = new Google_Client();
$client->useApplicationDefaultCredentials(); 
$client->setApplicationName(APPLICATION_NAME);
$client->setScopes(SCOPES); 
$client->setAccessType("offline");
$client->setSubject($user);

$service = new Google_Service_Directory($client); 

try {
 $usuari = $service->users->get($mail); 
 $usuari->setSuspended($accion);
 $usuari = $service->users->update($mail,$usuari); 
 $valor = "OK";
} 
catch(Exception $e) {
  $valor = $e->getMessage();
 }
return $valor;
}

Función para Inicializar la contraseña de una cuenta de usaurio

function ResetPassword($mail,$password) {

/* 
 Reseteamos la contraseña del usuario por su DNI.

 Parámetros:
  - $mail: correo de la cuenta que queremos cambiar la contraseña
  - $password: será el DNI del usuario que está en la tabla
*/

define('APPLICATION_NAME', 'Proves');
define('SCOPES', implode(' ', array(
Google_Service_Directory::ADMIN_DIRECTORY_USER,
Google_Service_Directory::ADMIN_DIRECTORY_USERSCHEMA
)));

putenv('GOOGLE_APPLICATION_CREDENTIALS=/var/www/html/proves.json');
date_default_timezone_set("Europe/Madrid"); 

$user = "cuenta@dominio.com";

$client = new Google_Client();
$client->useApplicationDefaultCredentials(); 
$client->setApplicationName(APPLICATION_NAME);
$client->setScopes(SCOPES); 
$client->setAccessType("offline");
$client->setSubject($user);

$service = new Google_Service_Directory($client); 
$nomUsuari = new Google_Service_Directory_UserName($client);

try {
 $usuari = $service->users->get($mail);
 $usuari->setPassword($password);
 $usuari = $service->users->update($mail,$usuari); 
 $valor = "Contraseña actualizada";
} 
catch(Exception $e) {
 $valor = "Message: " .$e->getMessage();
}
return $valor;
}

En breve os explico el significado de lo que está en rojo y de donde he sacado toda esa información.., y os cuelgo un report de la creación del proyecto ..

Espero os haya gustado. Nos vemos en el segundo capítulo

 

 

You may also like

Leave a Comment