Propriétés de la page | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||
|
Présentation du service
Ce service pilote les comptes GoogleApps. Il permet à n'importe quel application de piloter les compte google.
Cette fonction était auparavant supportée par Platal avec l'application python GappsD développée par les X
L'utilisation d'un micro service permet de découpler l'appli donneuse d'ordre de l'implémentation et d'implémenter une vrai queue d'actions
C'est une application autonome stateless
Sommaire | ||
---|---|---|
|
Infos pour les Ops
Environnements
Développement
Domaine Google Apps de recette Poubs.org
VHost rabbit MQ pour chaque developpeurs
L'instance de l'API GrAMv2 est à héberger par le developpeur
Recette
Hébergement | Heroku |
---|---|
Caractéristiques | App rec-gapps-daemon sur appartenant à l'utilisateur [email protected] |
Resources |
|
Production
Hébergement | Heroku |
---|---|
Caractéristiques | App gapps-daemon sur appartenant à l'utilisateur [email protected] |
Resources |
|
Dépendances extérieures
API Google
Redis pour être stateless (stockage des token de l'api Google)
Api Gram
Déploiement
Configuration
L'application fonctionne soit avec des variables d'environnement, soit avec un fichier de configuration.
Le fichier de configuration est situé dans config/config.yml
Bloc de code | ||||
---|---|---|---|---|
| ||||
default: &default application_name: GoogleDirectoryDaemon-test application_id: gdd authorizer: DefaultAuthorizer admin_user_id: my.user@my_org.com message_handler_map: request.gapps.create: DefaultMessageHandler rabbitmq_host: localhost rabbitmq_port: 5672 rabbitmq_vhost: / rabbitmq_queue_name: gdirdaemon rabbitmq_deferred_time: 1800000 rabbitmq_max_attempts: 48 exchange_name: exchange rabbitmq_user: my_user rabbitmq_password: P4ssWord log_routing_key:"logging.key" gram_api_host: myHost.com gram_api_user: myUser gram_api_password: PasswRD gram_api_proxy: myproxy.mydomain.com logger_level: DEBUG development: <<: *default test: <<: *default production: <<: *default |
Tout ces attributs peuvent être indiquer en variable d'environnement en les mettant en majuscules et en prefixant le nom avec GDD_
Les variables d'environnement sont prioritaires sur le fichier de configuration
Exemple : GDD_RABBITMQ_HOST
L'environnement utilisé est défini par la variable d'environnement GOOGLE_DIRECTORY_DAEMON_ENV
et à pour valeur "development" par défaut
La variable logger_level
permet de définir la verbosité des logs. Les valeurs autorisées sont :
- DEBUG - valeur par défaut
- INFO
- WARN
- ERROR
- FATAL
Pour fonctionner les API google on besoin d'un json appelé client_secret.json.
Ce fichier est stocké dans le dossier secrets/
Il est également possible de stocker le JSON dans la variable d'environnement GDD_GOOGLE_CLIENT_SECRET
Si la variable d'environnement REDIS_URL est définie l'appli stockera les token de connexion dans le Redis, sinon ils seront stocké dans secrets/tokens.yaml
Arret / Démarage
Sur Heroku :
Suivre la procédure Démarrer/Arrêter une application sur Heroku
En local :
Lancer l'executable bin/worker
pour démarrer le service
Ctrl+C pour le couper ou envoyer SIGINT
(kill -2
)
Accéder aux Logs
Suivre la procédure Accéder aux logs d'une application Heroku
Installation
Infos pour les Dev'
Notifications générées
Clé de routage | Quand ? | Contenu du message | Exemple de contenu | |||||||
---|---|---|---|---|---|---|---|---|---|---|
notify.googleapps.user.created | Quand la création d'un compte et de ses alias ne retourne aucune erreur | uuid : l'uuid du compte google_id : id du compte google créé |
| |||||||
notify.googleapps.user.updated | uuid : l'uuid du compte google_id : id du compte google créé |
| ||||||||
notify.googleapps.user.deleted | Quand un compte est supprimé avec succés | key : id du compte google supprimé |
|
Astuce |
---|
N'oubliez pas de mettre à jour la propriétés "Clés de routage émises" de la page avec les nouvelles routing keys |
Avertissement | ||
---|---|---|
| ||
Si vous modifiez le format d'une notification existante, essayez au maximum de conserver les données précédentes et pensez à reporter les changements sur les services clients de cette notification |
Requêtes faites à d'autres services
Clé de routage | Commentaires |
---|---|
Astuce |
---|
N'oubliez pas de mettre à jour la propriétés "Clés de routage émise" de la page avec les nouvelles routing keys |
Requetes écoutées
Clé de routage | Actions effectuées | Contenu du message | Exemple de contenu | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request.googleapps.user.create | Crée un compte google apps et ses alias. Récupère le mots de passe depuis le GrAM Met à jour l'id google dans le GrAM si le compte est créé avec succès. |
|
| ||||||||||||
request.googleapps.user.update | Met à jour le compte Récupère le mots de passe depuis le GrAM |
|
| ||||||||||||
request.googleapps.user.delete | Supprime le compte | La clé google_account_key est necessaire |
|
Astuce |
---|
N'oubliez pas de mettre à jour la propriétés "Clés de routage écoutées" de la page avec les nouvelles routing keys |
Avertissement | ||
---|---|---|
| ||
Si vous modifiez le format d'une requete existante, pensez à reporter les changements sur les services clients de cette requete |
Notifications écoutées
Clé de routage | Actions effectuées |
---|---|
notify.account.updated | Convertit key en gram_account_uuid et transmet à request.googleapps.user.update |
Astuce |
---|
N'oubliez pas de mettre à jour la propriétés "Clés de routage écoutées" de la page avec les nouvelles routing keys |
Codes erreurs
Erreur lors de la validation des données
Le message est compris mais ne correspond pas au schéma attendu.
Réponse
Status: Hardfail
Code erreur : 422 - Unprocessable Entity
Nom de l'erreur : InvalidPayload
Données :
- DOIT contenir les erreurs par rapport au schema
- PEUT contenir le schéma attendu
Identifiant google déjà enregistré dans le GrAM
Le compte GrAM contient déjà un identifiant Google et cet identifiant renvoie sur un compte existant.
Dans le cas d'utilisation par GorgMai, un membre du support doit intervenir pour vérifier que ce compte est bien celui de l'utilisateur. Si c'est le cas il modiie les alias afin de correspondre aux données de GorgMail. Si ce n'est pas le cas il doit supprimer l'identifiant dans le GrAM afin de relancer la procedure et créer un nouveau compte.
Réponse
Status: Hardfail
Code erreur : 409 - Conflict
Nom de l'erreur : GoogleAccountAlreadyRegisteredInGram
Données :
- DOIT contenir les infos du compte google enregistré dans GrAM :
- L'identifiant Google (numérique)
- L'adresse principale
- Le prenom
- Le nom
- Le UUID de l'utilisateur si celui ci est energistré chez Google
Notes
Si un compte GrAM contient déjà un identifiant Google mais que cet identifiant ne correspond pas à un compte Google existant, il est ignoré et écrasé par le compte Google nouvellement créé.
Adresse principale déjà enregistrée chez Google
Le compte google ne peut pas être créé car un compte google existe déjà avec cette adresse. Il peut s'agir d'une adresse principale ou d'un alias. Cette erreur est grave car elle signifie qu'une adresse Gadz.org a été réattribué et une intervention humaine est nécessaire pour rétablir l'unicité des adresses Gadz.org
Réponse
Status: Hardfail
Code erreur : 409 - Conflict
Nom de l'erreur : GoogleAccountAlreadyExists
Données :
- DOIT contenir les infos du compte google en doublon
- L'identifiant Google (numérique)
- L'adresse principale
- Le prenom
- Le UUID de l'utilisateur si celui ci est energistré chez Google
- Le nom
Erreur lors de l'execution.
Une erreur est apparu pendant l'execution du code. Il peut s'agir d'une erreur prévu ou non.
Réponse
Status: Hardfail
Code erreur : 500 - InternalError
Nom de l'erreur : Par défaut "InternalError"
Données :
- DOIT contenir l'état du compte Google et ses données d'identifications
- DOIT contenir le nom de l'erreur interne ayant été levé
- PEUT contenir des données de debug
Cas particulier : Erreur lors de la mise à jour du compte GrAM
Il s'agit d'une erreur facilement identifiable. Généralement, elle apparaît lorsqu'un compte gram a été enregistré de force avec des données invalides et refuse ainsi toute mise à jour tant que les données invalides ne sont pas corrigées. Si ce bug apparaît, le compte google a bien été créé mais il n'est pas lié avec le compte GrAM. Une correction manuelle est nécessaire et l'enregistrement du compte google dans le GrAM doit être réalisé manuellement.
Données supplémentaires à inclure dans le debug :
- Les données du compte GrAM à enregistrer (en prenant soin de supprimer le hash du mot de passe)