Vai al contenuto

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 GOOGLE-PATH-BAT-CURL Path degli script .bat
GOOGLE GOOGLE-TEMPO-REFRESH-TOKEN Tempo di validita' token
GOOGLE GOOGLE-PATH-CURL Path dell'eseguibile curl
ARC-OTT PATH-APRI-FILE Path di lavoro per il file di output

Gestione errori

  • Se MASKOPER.ARC non si apre correttamente il programma segnala lo stato e termina.
  • In refresh-token, esito non nullo di C$SYSTEM, mancato trasferimento con COPIAF, o filseq non 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: dimensione tm-tab in memoria.
  • Il numero massimo di operatori configurabili e' limitato dalla configurazione GOOGLE-NUMERO-UTENTI (messaggio che rimanda agli uffici commerciali Eurosystem al superamento).
  • w-calderone e la chiave w-key derivata 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: usa source-computer/object-computer acu-cobol. Predisposto per compilazione condizionale ISCOBOL/AcuCOBOL (>> IF ISC IS DEFINED).