CRM150 - Configurazione operatori Google Calendar¶
Sorgente: cbl/crm150.cbl | Program-ID: CRM150 | Tipo: Programma interattivo GUI (anagrafica su griglia)
Menu: CRM > Archivi > Sincronizza GoogleCalendar
Scopo¶
Gestisce l'anagrafica degli operatori abilitati alla sincronizzazione con Google Calendar (e Google Task). Per ogni operatore memorizza su CRMGGUSR i flag di abilitazione (calendar/task) e le credenziali OAuth2 di Google: account, id calendario, client-id, client-secret, redirect-url, authorization-code, access-token e refresh-token con relative data/ora di rilascio.
Oltre alla manutenzione dei dati, il programma pilota il flusso di autorizzazione OAuth2: apre il browser sulla pagina di consenso Google (F5) e ottiene/rinnova i token invocando via shell script .bat basati su curl (F6), riportando in griglia i token risultanti.
Nota: l'etichetta di menu "Sincronizza GoogleCalendar" descrive la finalita' complessiva; il programma in se' e' l'anagrafica di configurazione degli operatori/credenziali e la procedura di ottenimento token, non l'esecuzione della sincronizzazione degli eventi.
File e tabelle¶
| File/Tabella | Tipo | Modalita' | Descrizione |
|---|---|---|---|
| FEURTAB | ISAM | I-O | Tabella features/abilitazioni utente |
| CRMGGUSR | ISAM | I-O | Configurazione operatori Google (chiave: crg-usr-ope) |
| PRNTOPER | ISAM | Input | Anagrafica operatori (validazione ptop-cod, descrizione, flag amministratore) |
| MASKOPER | file (MASKOPER.ARC) |
I-O | Archivio maschere/personalizzazioni operatore |
filseq (fout-curl.txt) |
line sequential | I-O | File di output prodotto da curl, da cui vengono estratti i token |
filelog (#$logcrm150-<oper>) |
binary sequential | Output | Log dei comandi shell eseguiti |
Copybook utilizzate¶
| Copybook | Descrizione |
|---|---|
crm150.select, crm150.fd, crm150.wrk |
SELECT, FD, working storage (Screens) |
crm150-01.scr, crm150.decla, crm150.prc |
Screen, declaratives, procedure I/O |
feurtab.fd, cogfiles.cpy, maskoper.fd, maskoper.cpy, maskoper.k01 |
FEURTAB e archivio MASKOPER |
wstato.cpy, wgrave.cpy, wopenf.cpy, wnscr.cpy |
Working storage standard |
wgrid.cpy, utilgdad.cpy, utilgrid.cpy |
Supporto griglia (GRIDADMN) |
cogazien.cpy |
Dati azienda |
utilncnf.cpy |
Linkage RNEWCONF (parametri Google) |
utilbrws.cpy |
Linkage BROWSER (apertura pagina web) |
utildlg.cpy, utils65.cpy, utild34.cpy, utilt24.cpy, utilt30.cpy, utilw80.cpy, utilt20.cpy |
Supporto controlli/dialoghi |
l-copiaf.cpy, u-copiaf.cpy |
Linkage COPIAF (trasferimento file client/server) |
acucobol.def / iscobol.def |
Definizioni ambiente |
wcont.cpy, wcont1.cpy |
Linkage standard |
grave.cpy, mmmask.cpy, opengen.cpy, stato.cpy, stato1.cpy, winmsg.cpy, sendw80.cpy |
Infrastruttura standard |
Logica di elaborazione¶
Inizializzazione (apri): Init programma, apertura file. Legge l'operatore (PRNTOPER) per ricavare il flag amministratore. Apre MASKOPER.ARC in I-O (se fallisce esce). Apre il file di log. Lettura configurazione RNEWCONF (x99-confi). Se lanciato in modalita' called (t20-called = k-program-id con caller valorizzato) entra in modalita' "S" (selezione), altrimenti "A" (aggiornamento). Costruisce una chiave di trascodifica (w-key) a partire dalla costante w-calderone. Configura i tasti funzione (invio, F3, F1 config, F8 aiuto, Shift+F4, Ctrl+A, Ctrl+E, F6 refresh token).
Caricamento griglia (a10): Scansione CRMGGUSR; per ogni riga legge l'operatore su PRNTOPER per la descrizione e carica in tm-tab (occurs 900) codice, descrizione, flag calendar/task, account, password e tutti i campi OAuth2.
Loop griglia (a-grid / a-accept-grid):
- Invio in modalita' "A" -> modifica riga; in modalita' "S" -> ritorna al chiamante (t20-out-cod, t20-out-des).
- Ctrl+A -> inserimento nuovo operatore; blocca l'aggiunta se e' stato raggiunto il numero massimo di utenti abilitati (tm-cfg-num-utenti da configurazione).
- Ctrl+E -> cancellazione riga con conferma.
- F6 -> refresh-token (ottenimento/rinnovo token, vedi sotto).
- Shift+F4 -> GRIDADMN personalizzazione griglia.
- F1 -> modifica configurazione RNEWCONF.
Dettaglio riga (a-riga-dettaglio e accept successivi): Sequenza di accept sui campi (a-tm-ope-cod, flag calendar/task, account, password, id-calendar, client-id, client-secret, redirect-url, ottieni-author, auth-code, refresh-code). Sul codice operatore F8 richiama COGT20 (ricerca operatore). Su piu' campi F5 apre il browser (call-browser) e F6 lancia il refresh token.
Autorizzazione OAuth2 (call-browser, F5): Compone l'URL https://accounts.google.com/o/oauth2/auth?... con redirect_uri, scope calendar e client_id della riga, quindi chiama BROWSER per aprirlo. L'utente autorizza e ottiene l'authorization-code.
Ottenimento/rinnovo token (refresh-token, F6): In base alla presenza del refresh-token compone la riga di comando invocando lo script curl-pr-token.bat (primo rilascio da auth-code) oppure curl-rf-token.bat (rinnovo da refresh-token), con path da configurazione. Registra il comando su log (errore-1), esegue via C$SYSTEM (call-system-sync) scrivendo l'output in fout-curl.txt, trasferisce il file dal client al server con COPIAF, poi lo apre come filseq e (in tratta-file) estrae access_token e refresh_token dalle righe delimitate da virgolette, aggiornando la riga di griglia e le date/ore token.
Salvataggio riga (a-riga-dettaglio-fine): Controlli, conferma, aggiornamento della griglia via GRIDADMN e scrittura su CRMGGUSR (wr-crmggusr in inserimento / rwr-crmggusr in modifica); rileva ins/mod discordanti e corregge l'operazione.
Chiamate a sottoprogrammi¶
| Programma | Utilizzo |
|---|---|
COGT20 |
Ricerca operatore (F8 sul codice) |
BROWSER |
Apertura pagina di autorizzazione Google OAuth2 (F5) |
COPIAF |
Trasferimento file fout-curl.txt client -> server |
GRIDADMN |
Gestione griglia (prepara, add/modify, svuota, personalizzazione) |
RNEWCONF |
Lettura/modifica configurazione parametri Google |
C$SYSTEM |
Esecuzione sincrona degli script .bat curl |
Configurazione (RNEWCONF)¶
Gruppo/chiavi lette in x99-confi (pacchetto C):
| Gruppo | Chiave | Uso |
|---|---|---|
| ABILITA | GOOGLE-CALENDAR | Abilitazione funzione |
| ABILITA | GOOGLE-NUMERO-UTENTI | Numero massimo operatori abilitabili |
| GOOGLE-PATH-BAT-CURL | Path degli script .bat |
|
| GOOGLE-TEMPO-REFRESH-TOKEN | Tempo di validita' token | |
| GOOGLE-PATH-CURL | Path dell'eseguibile curl | |
| ARC-OTT | PATH-APRI-FILE | Path di lavoro per il file di output |
Gestione errori¶
- Se
MASKOPER.ARCnon si apre correttamente il programma segnala lo stato e termina. - In
refresh-token, esito non nullo diC$SYSTEM, mancato trasferimento conCOPIAF, ofilseqnon trasferito/aperto (stato 23 lock, 35 assente) interrompono l'operazione con messaggio. - Ogni comando shell eseguito viene tracciato su
filelog(errore-1).
Note implementative¶
- Autore: Mauro Rovatti (Eurosystem).
k-max-ele-tab = 900: dimensionetm-tabin memoria.- Il numero massimo di operatori configurabili e' limitato dalla configurazione
GOOGLE-NUMERO-UTENTI(messaggio che rimanda agli uffici commerciali Eurosystem al superamento). w-calderonee la chiavew-keyderivata sono un meccanismo di trascodifica presente nel sorgente; la cifratura della password (ENCRYPT) e' predisposta ma commentata: la password viene attualmente salvata in chiaro.- Il flusso token dipende dalla presenza di eseguibili esterni (
curl, script.bat) sul client e dal trasferimento del file di output verso il server tramite COPIAF. configuration section: usasource-computer/object-computer acu-cobol. Predisposto per compilazione condizionale ISCOBOL/AcuCOBOL (>> IF ISC IS DEFINED).