...
- smb, cmis, file, sftp / ftp, pour ces types, il faut suive les explications du tableau ci-dessus
- http:// https:// (fera une requete, type REST, vers l'url avec en paramètre l'ID de la demande de signature, son statut signé ou refusé et le numéro d'étape concerné
- mailto (envoi du document en pièce jointe au destinataire)
Voici un exemple de code à mettre coté application métier pour permettre à esup-signature de transmettre les informations du circuit via REST. Ici il s'agir d'un controleur Spring. La requête est envoyée en GET, esup-signature doit avoir un accès direct à cette API.
Transmission vers REST
(maj depuis pour la version 1.30.x)
Lorsque vous configurez une adresse type "rest", donc vers un websevice en écoute, esup-signature va tenté de transmettre les données via GET et via POST.
Voici la liste (et le format) des données transmisent :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
{
"signRequestId": ["XXXX"],
"status": ["deleted"],
"step": [
"2"
],
"userEppn": [
"esupdem@univ-rouen.fr"
],
"comment": [
""
]
}
|
En GET les informations sont transmisent via les paramètres de la requête.
Voici un exemple de code à mettre coté application métier pour permettre à esup-signature de transmettre les informations du circuit via REST. Ici il s'agir d'un controleur Spring. La requête est envoyée en GET, esup-signature doit avoir un accès direct à cette API.
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
@GetMapping(value = "/return-test")
@ResponseBody
public ResponseEntity<Void> returnTest(@RequestParam("signRequestId") String signRequestId, @RequestParam("status") String status, @RequestParam("step") String step) {
logger.info(signRequestId + ", " + status + ", " + step);
//ici, le code à executer coté application métier en fonction du statut
return ResponseEntity.ok().build();
}
|
En POST, les informations sont transmisent sous forme de map json:
Voici un script python permettant de simuler un mini server web et affichant les données reçues:
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse, parse_qs
import json
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
# Parse l'URL et ses paramètres
parsed_path = urlparse(self.path)
query_components = parse_qs(parsed_path.query)
# Affiche les informations dans la console
print("Received GET request:")
print(f"Path: {self.path}")
print("Query parameters:")
for key, values in query_components.items():
for value in values:
print(f" {key}: {value}")
# Prépare la réponse (simple pour le client)
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(b"<html><body><h1>GET request received</h1></body></html>")
def do_POST(self):
# Récupère la longueur des données envoyées
content_length = int(self.headers['Content-Length'])
# Récupère le corps de la requête
post_data = self.rfile.read(content_length)
# Tente de décoder les données comme JSON
try:
json_data = json.loads(post_data)
print("Received POST request with JSON data:")
print(json.dumps(json_data, indent=4))
except json.JSONDecodeError:
print("Received POST request with invalid JSON")
json_data = {"error": "Invalid JSON"}
# Prépare la réponse (simple pour le client)
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers() | ||||
| Bloc de code | ||||
| ||||
@GetMapping(value = "/return-test") @ResponseBody public ResponseEntity<Void> returnTest(@RequestParam("signRequestId") String signRequestId, @RequestParam("status") String status, @RequestParam("step") String step) { loggerself.wfile.infowrite(signRequestIdb"<html><body><h1>POST + ", " + status + ", " + step);request received</h1></body></html>") def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler, port=8000): server_address //ici, le code à executer coté application métier en fonction du statut return ResponseEntity.ok().build(); }= ('', port) httpd = server_class(server_address, handler_class) print(f"Starting server on port {port}...") httpd.serve_forever() if __name__ == '__main__': run() |
...
Définir les participants à un circuit à posteriori
...