Erreur system log deprecation / parseAuth depuis l'upgrade avec l'image du 19/04

Tags: #<Tag:0x00007f9e4c50b238>

Bonjour,

Depuis le déploiement de la dernière image du 19/04, j’ai l’erreur suivante dans les logs (a priori, cette fonction n’est pas appelée dans nos codes).

2020-04-21 14:08:25,889 ERROR [com.simplicite.util.ScriptedGrantHooks] SIMPLICITE|http://b043d58521d0:8080||ERROR|system|com.simplicite.util.ScriptedGrantHooks|parseAuth with String argument||Event: Outdated deprecated method, please use parseAuth with SessionInfo argument, call stack: com.simplicite.util.AppLog.deprecation[618]
     com.simplicite.util.ScriptedGrantHooks.parseAuth[348]
     com.simplicite.webapp.servlets.OAuth2Servlet.callback[329]
     com.simplicite.webapp.servlets.OAuth2Servlet.doGet[857]
     com.simplicite.webapp.filters.RewriteFilter.doFilter[77]
     com.simplicite.webapp.filters.AbstractFilter.doFilter[37]
     com.simplicite.tomcat.valves.APISessionValve.invoke[187]

[Platform]
Status=OK
Version=4.0.P24
BuiltOn=2020-04-19 23:28 (revision 668055213d7f926522223b8116cc1ba5d8ef0b9d)

Oui cet ancien parseAuth est désormais deprecated au profit du nouveau parseAuth prenant non plus un string mais un session info en argument. Mais il reste appelé. L’erreur c’est pour inciter au refactoring.

C’est documenté ici: https://docs.simplicite.io/4.0/releasenote/releasenote-patchlevel-24.md#post-release.

On est passé en deprecated “outdated” (donc générant une erreur au lieu d’un simple warning précédement) car l’ancien parseAuth a été retiré définitivement de la version en dev

En pratique on retrouve l’argument string en faisant info.getLogin(), ex:

public static String parseAuth(Grant sys, SessionInfo info) {
	AppLog.info(GrantHooks.class, "parseAuth", "Session info: " + info.toString(), sys);

	String login = info.getLogin();
...
}

PS: j’ai passé ce post en “Support”

Merci pour ta réponse, précisément, nous ne faisons a priori nulle part appel à cette fonction (parseAuth).
Cet appel (deprecated/obsolete) doit être dans un code socle quelque-part (ou alors je n’ai pas su ou chercher)…

Ce n’est pas dans vos GrantHooks ?

Tu m’as fait douter: j’ai revérifié et non, on ne l’utilise pas.

On a bien quelques lignes qui utilisent this.getGrant().getAuthProvider() et this.getGrant().getSessionInfo().getIDToken() mais aucune parseAuth…

Je pense que c’est dans lors du login oauth2 que l’erreur est générée:

com.simplicite.webapp.servlets.OAuth2Servlet.callback

OK merci d’avoir vérifié. Je vais regarder, comme il s’agit d’un backport il y a peut être eu un raté…

Non je ne vois pas de différence… Juste pour comprendre dans quel cas vous êtes, vous avez un GrantHook ou non ? Si oui est il Java ou Rhino ?

Oui, GrantHooks en Rhino (code dispo sur l’instance simplicite.io).
D’après ce que j’interprète des logs, il semble que le code gérant le login fasse appel à une fonction

ScriptedGrantHooks.parseAuth

qui n’est pas définie dans le code Rhino (confusant).

OK c’est un cas qu’on a pas du tester… quand tu dis sur l’instance simplicite.io tu parles de l’instance bcsi ? C’est pour savoir quels hooks sont implémentés…

Oui: https://bcsi.renault.simplicite.io
Erreur dans les logs suite à connexion “Renaut IPN”

2020-04-21 18:06:03,449 INFO [com.simplicite.util.ScriptInterpreter] SIMPLICITE|http://b043d58521d0:8080||INFO|system|com.simplicite.util.ScriptInterpreter|GrantHooks||Event: [IN GrantHooks.preLoadResponsibilities] Check activable responsibilities for a068181
2020-04-21 18:06:03,077 ERROR [com.simplicite.util.ScriptedGrantHooks] SIMPLICITE|http://b043d58521d0:8080||ERROR|system|com.simplicite.util.ScriptedGrantHooks|parseAuth with String argument||Event: Outdated deprecated method, please use parseAuth with SessionInfo argument, call stack: com.simplicite.util.AppLog.deprecation[618]
     com.simplicite.util.ScriptedGrantHooks.parseAuth[348]
     com.simplicite.webapp.servlets.OAuth2Servlet.callback[826]
     com.simplicite.webapp.servlets.OAuth2Servlet.doGet[857]
     com.simplicite.webapp.filters.RewriteFilter.doFilter[77]
     com.simplicite.webapp.filters.AbstractFilter.doFilter[37]
     com.simplicite.tomcat.valves.APISessionValve.invoke[187]
2020-04-21 18:06:00,650 INFO [com.simplicite.util.CronJob] SIMPLICITE|http://b043d58521d0:8080||ICORECM005|system|com.simplicite.util.CronJob|run||Result of job LogMemory :

Les hooks implémentés sont divers (menu, preloadResp, pre/postSearchIndex, …)

Ok je suis en train de tester un meilleur ciblage pour la génération de cette erreur de deprecation.

Quoiqu’il en soit ça reste une erreur de deprecation sans gravité ni impact sur le traitement

Bonjour,

Je me permets de m’incruster dans ce post puisque nous rencontrons aussi la même erreur :

2020-04-22 12:08:11,176 ERROR [com.simplicite.util.ScriptedGrantHooks] SIMPLICITE|http://e3m.simplicite.io:10118||ERROR|system|com.simplicite.util.ScriptedGrantHooks|parseAuth with String argument||Evénement: Outdated deprecated method, please use parseAuth with SessionInfo argument, call stack: com.simplicite.util.AppLog.deprecation[618]
     com.simplicite.util.ScriptedGrantHooks.parseAuth[348]
     com.simplicite.webapp.servlets.OAuth2Servlet.callback[329]
     com.simplicite.webapp.servlets.OAuth2Servlet.doGet[857]
     com.simplicite.webapp.filters.RewriteFilter.doFilter[77]
     com.simplicite.webapp.filters.AbstractFilter.doFilter[37]
     com.simplicite.tomcat.valves.APISessionValve.invoke[187]
2020-04-22 12:08:09,572 INFO [com.simplicite.util.Grant] SIMPLICITE|http://e3m.simplicite.io:10118||ICORED0001|public|com.simplicite.util.Grant|init||Info : public connected, session ID: 3F7242128D90C596C5011C402ABB03CA, timeout: 5 min , user agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36

Le seul hook qu’on utilise dans le GrantHooks est le postSearchIndex. Nous ne faisons aucun appel à parseAuth

Abed

On a rendu le code plus “malin”, ce message de deprecation ne devrait plus s’afficher plus dans vos cas (avec les révisions qui seront poussées cette nuit)

Bonjour David,

@Amandine a remarqué que ce message de deprecation s’affiche dans le cas d’un nouveau référentiel (pas si nouveau car il s’agit du serpent de mer IT4IT déjà identifié dans nos tablettes) et dont la classe GrantHook est initialisée en Java.

Il semble que le code partagé de GrantHooks ait été initialisé par défaut (template de code?) avec l’ancienne interface parseAuth/String.

Tant que nous ne surchargeons pas la méthode parseAuth avec la bonne interface (i.e. SessionInfo à la place de String), l’alerte de deprecation est remontée.

Autre sujet connexe: il y avait par le passé une fonction permettant de créer les nouveaux users à la volée lors de la connexion… Il semble que ce ne soit plus le cas (ou alors la fonction est débrayée par paramétrage et nous devons la réactiver explicitement). Ce n’est ni urgent ni bloquant car ce comportement (plus de création de user en automatique) est a priori en place depuis plusieurs mois… C’est juste que cette fonction est très utile si nous voulons fluidifier au maximum l’intégration de nouveaux acteurs dans nos processus.

Bruno

J’ai vérifié les snippets de GrantHooks sont bien sur la nouvelle méthode public static String parseAuth(Grant sys, SessionInfo info) sur toutes les révisions à jour des différentes branches.

Et sur une nouvelle instance “out of the box” il n’y a pas de GrantHook par défaut, il faut le créer explicitement.

Peut être avez vous un module que vous installez par défaut avec un GrantHooks que vous aviez créé avec une ancienne révision pour laquelle le snippet était sur l’ancien parseAuth

S’agissant de la création des users à la connexion il faut implémenter votre logique dans le preLoadGrant comme dans l’exemple de ce doc: https://docs.simplicite.io/documentation/91-authentication/tomcat-oauth2.md

OK, merci pour ton retour rapide.
@Amandine va vérifier si ce code ne trainerait pas dans le module applicatif IT4IT…

Oui le “shared code” GrantHooks est nécessairement dans un module