Connecteur Google Workspace

Apercu

Le connecteur Google Workspace fournit la fonctionnalite permettant de recuperer les fichiers depuis Google Drive (anciennement G Suite) et de les enregistrer dans l’index Fess.

Cette fonctionnalite necessite le plugin fess-ds-gsuite.

Services pris en charge

  • Google Drive (Mon Drive, Drive partages)

  • Google Docs, Sheets, Slides, Forms, etc.

Prerequis

  1. L’installation du plugin est requise

  2. La creation d’un projet Google Cloud Platform est necessaire

  3. La creation d’un compte de service et l’obtention des identifiants sont necessaires

  4. La configuration de la delegation a l’echelle du domaine Google Workspace est necessaire

Installation du plugin

Methode 1 : Placement direct du fichier JAR

# Telecharger depuis Maven Central
wget https://repo1.maven.org/maven2/org/codelibs/fess/fess-ds-gsuite/X.X.X/fess-ds-gsuite-X.X.X.jar

# Placement
cp fess-ds-gsuite-X.X.X.jar $FESS_HOME/app/WEB-INF/lib/
# ou
cp fess-ds-gsuite-X.X.X.jar /usr/share/fess/app/WEB-INF/lib/

Methode 2 : Installation depuis l’interface d’administration

  1. Ouvrir « Systeme » -> « Plugins »

  2. Telecharger le fichier JAR

  3. Redemarrer Fess

Configuration

Configurez depuis l’interface d’administration via « Crawler » -> « Data Store » -> « Nouveau ».

Configuration de base

Element Exemple
Nom Company Google Drive
Nom du gestionnaire GoogleDriveDataStore
Active Oui

Configuration des parametres

private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQE...\n-----END PRIVATE KEY-----\n
private_key_id=46812a3b4c5d6e7f8g9h0i1j2k3l4m5n6o7p8q9r
client_email=fess-crawler@your-project.iam.gserviceaccount.com

Liste des parametres

Parametre Requis Description
private_key Oui Cle privee du compte de service (format PEM, sauts de ligne en \n)
private_key_id Oui ID de la cle privee
client_email Oui Adresse email du compte de service
max_size Non Taille maximale des fichiers a indexer (en octets). Par defaut : 10000000 (environ 10 Mo)
ignore_folder Non Ignorer les dossiers ou non. Par defaut : true
ignore_error Non Continuer le traitement en cas d’erreur. Par defaut : true
supported_mimetypes Non Types MIME a indexer (expression reguliere, separes par des virgules). Par defaut : .* (tous les types)
include_pattern Non Expression reguliere des URL a inclure dans l’indexation
exclude_pattern Non Expression reguliere des URL a exclure de l’indexation
default_permissions Non Permissions par defaut (separees par des virgules, ex : {role}drive-users)
number_of_threads Non Nombre de threads de traitement parallele. Par defaut : 1
query Non Chaine de requete de recherche de l’API Google Drive
corpora Non Corpus a rechercher. Par defaut : allDrives
spaces Non Espaces a rechercher (parametre spaces de l’API Google Drive, par ex. drive, appDataFolder). Par defaut : non defini (valeur par defaut de l’API).
fields Non Champs de fichier a demander a l’API Google Drive. Par defaut : * (tous les champs).
read_timeout Non Delai de lecture HTTP (en millisecondes). Par defaut : 20000
connect_timeout Non Delai de connexion HTTP (en millisecondes). Par defaut : 20000
refresh_token_interval Non Intervalle (en secondes) pour renouveler le jeton d’acces OAuth. Par defaut : 3540 (59 minutes).
max_cached_content_size Non Taille maximale (en octets) du contenu conserve en memoire ; un contenu plus volumineux est decharge dans un fichier temporaire. Par defaut : 1048576 (1 Mo).
proxy_host Non Nom d’hote du serveur proxy
proxy_port Non Numero de port du serveur proxy

Configuration du script

title=file.name
content=file.description + "\n" + file.contents
mimetype=file.mimetype
created=file.created_time
last_modified=file.modified_time
url=file.url
thumbnail=file.thumbnail_link
content_length=file.size
filetype=file.filetype
role=file.roles
filename=file.name

Champs disponibles

Champ Description
file.name Nom du fichier
file.description Description du fichier
file.contents Contenu textuel du fichier
file.mimetype Type MIME du fichier
file.filetype Type de fichier
file.created_time Date de creation
file.modified_time Date de derniere modification
file.web_view_link Lien pour ouvrir dans le navigateur
file.url URL du fichier
file.thumbnail_link Lien vers la miniature (valide temporairement)
file.size Taille du fichier (octets)
file.roles Permissions d’acces

Pour plus de details, consultez Google Drive Files API.

Configuration Google Cloud Platform

1. Creation du projet

Accedez a https://console.cloud.google.com/ :

  1. Creez un nouveau projet

  2. Entrez le nom du projet

  3. Selectionnez l’organisation et l’emplacement

2. Activation de l’API Google Drive

Dans « APIs et services » -> « Bibliotheque » :

  1. Recherchez « Google Drive API »

  2. Cliquez sur « Activer »

3. Creation du compte de service

Dans « APIs et services » -> « Identifiants » :

  1. Selectionnez « Creer des identifiants » -> « Compte de service »

  2. Entrez le nom du compte de service (ex: fess-crawler)

  3. Cliquez sur « Creer et continuer »

  4. Les roles ne sont pas necessaires (ignorez)

  5. Cliquez sur « Terminer »

4. Creation de la cle du compte de service

Pour le compte de service cree :

  1. Cliquez sur le compte de service

  2. Ouvrez l’onglet « Cles »

  3. « Ajouter une cle » -> « Creer une nouvelle cle »

  4. Selectionnez le format JSON

  5. Enregistrez le fichier JSON telecharge

5. Activation de la delegation a l’echelle du domaine

Dans les parametres du compte de service :

  1. Cochez « Activer la delegation a l’echelle du domaine »

  2. Cliquez sur « Enregistrer »

  3. Copiez « l’ID client OAuth 2 »

6. Autorisation dans la console d’administration Google Workspace

Accedez a https://admin.google.com/ :

  1. Ouvrez « Securite » -> « Acces et controle des donnees » -> « Controles d’API »

  2. Selectionnez « Delegation a l’echelle du domaine »

  3. Cliquez sur « Ajouter nouveau »

  4. Entrez l’ID client

  5. Entrez les scopes OAuth :

    https://www.googleapis.com/auth/drive
    
  6. Cliquez sur « Autoriser »

Configuration des identifiants

Obtention des informations depuis le fichier JSON

Fichier JSON telecharge :

{
  "type": "service_account",
  "project_id": "your-project-id",
  "private_key_id": "46812a3b4c5d6e7f8g9h0i1j2k3l4m5n6o7p8q9r",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgk...\n-----END PRIVATE KEY-----\n",
  "client_email": "fess-crawler@your-project.iam.gserviceaccount.com",
  "client_id": "123456789012345678901",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/..."
}

Configurez les informations suivantes dans les parametres :

  • private_key_id -> private_key_id

  • private_key -> private_key (conservez les sauts de ligne en \n)

  • client_email -> client_email

Format de la cle privee

private_key conserve les sauts de ligne en \n :

private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG...\n-----END PRIVATE KEY-----\n

Exemples d’utilisation

Crawl de l’ensemble de Google Drive

Parametres :

private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQE...\n-----END PRIVATE KEY-----\n
private_key_id=46812a3b4c5d6e7f8g9h0i1j2k3l4m5n6o7p8q9r
client_email=fess-crawler@your-project-123456.iam.gserviceaccount.com

Script :

title=file.name
content=file.description + "\n" + file.contents
mimetype=file.mimetype
created=file.created_time
last_modified=file.modified_time
url=file.web_view_link
thumbnail=file.thumbnail_link
content_length=file.size
filetype=file.filetype
filename=file.name

Crawl avec permissions

Parametres :

private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQE...\n-----END PRIVATE KEY-----\n
private_key_id=46812a3b4c5d6e7f8g9h0i1j2k3l4m5n6o7p8q9r
client_email=fess-crawler@your-project-123456.iam.gserviceaccount.com
default_permissions={role}drive-users

Script :

title=file.name
content=file.description + "\n" + file.contents
mimetype=file.mimetype
created=file.created_time
last_modified=file.modified_time
url=file.web_view_link
role=file.roles
filename=file.name

Crawler uniquement certains types de fichiers

Google Docs uniquement :

if (file.mimetype == "application/vnd.google-apps.document") {
    title=file.name
    content=file.description + "\n" + file.contents
    mimetype=file.mimetype
    created=file.created_time
    last_modified=file.modified_time
    url=file.web_view_link
}

Depannage

Erreur d’authentification

Symptome : 401 Unauthorized ou 403 Forbidden

Points a verifier :

  1. Verifier si les identifiants du compte de service sont corrects :

    • Les sauts de ligne de private_key sont-ils en \n ?

    • private_key_id est-il correct ?

    • client_email est-il correct ?

  2. Verifier si l’API Google Drive est activee

  3. Verifier si la delegation a l’echelle du domaine est configuree

  4. Verifier si l’autorisation a ete accordee dans la console d’administration Google Workspace

  5. Verifier si le scope OAuth est correct (https://www.googleapis.com/auth/drive)

Erreur de delegation a l’echelle du domaine

Symptome : Not Authorized to access this resource/api

Solution :

  1. Verifier l’autorisation dans la console d’administration Google Workspace :

    • L’ID client est-il correctement enregistre ?

    • Le scope OAuth est-il correct ? (https://www.googleapis.com/auth/drive)

  2. Verifier si la delegation a l’echelle du domaine est activee sur le compte de service

Impossible de recuperer les fichiers

Symptome : Le crawl reussit mais 0 fichiers

Points a verifier :

  1. Verifier si des fichiers existent dans Google Drive

  2. Verifier si le compte de service a les droits de lecture

  3. Verifier si la delegation a l’echelle du domaine est correctement configuree

  4. Verifier si le Drive de l’utilisateur cible est accessible

Erreur de quota API

Symptome : 403 Rate Limit Exceeded ou 429 Too Many Requests

Solution :

  1. Verifier le quota dans Google Cloud Platform

  2. Augmenter l’intervalle de crawl

  3. Demander une augmentation de quota si necessaire

Erreur de format de cle privee

Symptome : Invalid private key format

Solution :

Verifier si les sauts de ligne sont correctement en \n :

# Correct
private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQE...\n-----END PRIVATE KEY-----\n

# Incorrect (contient des sauts de ligne reels)
private_key=-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQE...
-----END PRIVATE KEY-----

Crawl des Drive partages

Note

Pour crawler les Drive partages avec un compte de service, vous devez ajouter le compte de service comme membre du Drive partage.

  1. Ouvrez le Drive partage dans Google Drive

  2. Cliquez sur « Gerer les membres »

  3. Ajoutez l’adresse email du compte de service

  4. Definissez le niveau de permission sur « Lecteur »

Cas de nombreux fichiers

Symptome : Le crawl prend du temps ou expire

Solution :

  1. Diviser en plusieurs data stores

  2. Repartir la charge avec les parametres de planification

  3. Ajuster l’intervalle de crawl

  4. Crawler uniquement des dossiers specifiques

Permissions et controle d’acces

Reflet des permissions de partage Google Drive

Reflet des parametres de partage Google Drive dans les permissions Fess :

Parametres :

private_key=-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQE...\n-----END PRIVATE KEY-----\n
private_key_id=46812a3b4c5d6e7f8g9h0i1j2k3l4m5n6o7p8q9r
client_email=fess-crawler@your-project-123456.iam.gserviceaccount.com
default_permissions={role}drive-users

Script :

title=file.name
content=file.description + "\n" + file.contents
role=file.roles
mimetype=file.mimetype
created=file.created_time
last_modified=file.modified_time
url=file.web_view_link

file.roles contient les informations de partage Google Drive.

Informations de reference