1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
|
sAdresseServeur,sAdresseMail,sPassword,sPort sont des chaînes
sClientID,sTenantID,sClientSecret,sModeSSL,sUrlURI sont des chaînes
bAuth est un booléen
bufToken est un Buffer
sFichierPersistanceAuth est une chaîne
TokenSession is AuthToken
SELON SansEspace(INILit(pNomClient,"Authentification","Erreur",gsNomFicIni))
CAS ~~"oAuth"
bAuth = Vrai
AUTRE CAS
bAuth = Faux
FIN
sAdresseServeur = SansEspace(INILit(pNomClient,"AdresseServeur","Erreur",gsNomFicIni))
SI sAdresseServeur = "Erreur" OU sAdresseServeur = "" ALORS
ListeAjoutePlus(cTypeErreur,"Erreur impossible de lire la valeur AdresseServeur dans "+gsNomFicIni+" Section ["+pNomClient+"]")
GOTO Erreur_Label
FIN
sAdresseMail = SansEspace(INILit(pNomClient,"NomBoiteMail","Erreur",gsNomFicIni))
SI sAdresseMail = "Erreur" OU sAdresseMail = "" ALORS
ListeAjoutePlus(cTypeErreur,"Erreur impossible de lire la valeur NomBoiteMail dans "+gsNomFicIni+" Section ["+pNomClient+"]")
GOTO Erreur_Label
FIN
sPort = SansEspace(INILit(pNomClient,"PortMail","Erreur",gsNomFicIni))
SI sPort = "Erreur" OU sPort = "" ALORS
ListeAjoutePlus(cTypeErreur,"Erreur impossible de lire la valeur PortMail dans "+gsNomFicIni+" Section ["+pNomClient+"]")
GOTO Erreur_Label
FIN
sModeSSL = SansEspace(INILit(pNomClient,"TypeSSL","Erreur",gsNomFicIni))
SI sModeSSL = "Erreur" OU sModeSSL = "" ALORS
ListeAjoutePlus(cTypeErreur,"Erreur impossible de lire la valeur TypeSSL dans "+gsNomFicIni+" Section ["+pNomClient+"]")
GOTO Erreur_Label
FIN
SI bAuth ALORS
sClientID = SansEspace(INILit(pNomClient,"ClientID","Erreur",gsNomFicIni))
SI sClientID = "Erreur" OU sClientID = "" ALORS
ListeAjoutePlus(cTypeErreur,"Erreur impossible de lire la valeur ClientID dans "+gsNomFicIni+" Section ["+pNomClient+"]")
GOTO Erreur_Label
FIN
sClientSecret = SansEspace(INILit(pNomClient,"ClientSecret","Erreur",gsNomFicIni))
SI sClientSecret = "Erreur" OU sClientSecret = "" ALORS
ListeAjoutePlus(cTypeErreur,"Erreur impossible de lire la valeur ClientSecret dans "+gsNomFicIni+" Section ["+pNomClient+"]")
GOTO Erreur_Label
FIN
sTenantID = SansEspace(INILit(pNomClient,"TenantID","Erreur",gsNomFicIni))
SI sTenantID = "Erreur" OU sTenantID = "" ALORS
ListeAjoutePlus(cTypeErreur,"Erreur impossible de lire la valeur TenantID dans "+gsNomFicIni+" Section ["+pNomClient+"]")
GOTO Erreur_Label
FIN
sUrlURI = SansEspace(INILit(pNomClient,"UrlURI","Erreur",gsNomFicIni))
SI sUrlURI = "Erreur" OU sTenantID = "" ALORS
ListeAjoutePlus(cTypeErreur,"Erreur impossible de lire la valeur UrlURI dans "+gsNomFicIni+" Section ["+pNomClient+"]")
GOTO Erreur_Label
FIN
SINON
sPassword = SansEspace(INILit(pNomClient,"PasswordMail","Erreur",gsNomFicIni))
SI sPassword = "Erreur" OU sPassword = "" ALORS
ListeAjoutePlus(cTypeErreur,"Erreur impossible de lire la valeur PasswordMail dans "+gsNomFicIni+" Section ["+pNomClient+"]")
GOTO Erreur_Label
FIN
FIN
SI bAuth ALORS
sFichierPersistanceAuth = gsRepExe + "AuthSession"+sAdresseMail+".bin"
pMaSessionIMAP..AdresseServeur = sAdresseServeur
pMaSessionIMAP..Nom = sAdresseMail
pMaSessionIMAP..Port = sPort
SI sModeSSL = "SSL" ALORS
pMaSessionIMAP..Option = optionSSL
SINON
pMaSessionIMAP..Option = emailOptionSécuriséTLS
FIN
m_Svc est un OAuth2Paramètres
m_Svc.ClientID = sClientID
m_Svc.ClientSecret = sClientSecret
m_Svc.URLAuth = "https://login.microsoftonline.com/"+sTenantID+"/oauth2/v2.0/authorize"
m_Svc.URLToken = "https://login.microsoftonline.com/"+sTenantID+"/oauth2/v2.0/token"
m_Svc.Scope = "openid profile offline_access https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/SMTP.Send https://outlook.office.com/email"
m_Svc.URLRedirection = sUrlURI //"http://localhost:3017"
SI pForceToken ALORS
m_Svc.ParamètresSupplémentaires = "prompt=select_account"
TokenSession = AuthIdentifie(m_Svc)
SI TokenSession.Valide ALORS
QUAND EXCEPTION DANS
// Charge la session
Sérialise(TokenSession, bufToken, psdBinaire)
SI PAS fSauveBuffer(sFichierPersistanceAuth, bufToken) ALORS
ListeAjoutePlus(cTypeErreur,ErreurInfo())
GOTO Erreur_Label
FIN
FAIRE
// Erreur de relecture du token
ListeAjoutePlus(cTypeErreur,"Impossible de sérialiser le nouveau Token")
GOTO Erreur_Label
FIN
// Sauvegarde du token
FIN
SINON
SI PAS fFichierExiste(sFichierPersistanceAuth) ALORS
ListeAjoutePlus(cTypeErreur,"Le fichier Token "+sFichierPersistanceAuth+" n'existe pas")
GOTO Erreur_Label
FIN
QUAND EXCEPTION DANS
// Charge la session
bufToken = fChargeBuffer(sFichierPersistanceAuth)
Désérialise(TokenSession, bufToken, psdBinaire)
SI ((TokenSession.DateExpiration-1min < DateHeureSys()) _ET_
TokenSession.Actualisation <> "") OU TokenSession.Valide = Faux ALORS
TokenSession = AuthRenouvelleToken(TokenSession)
SI TokenSession.Valide ALORS
Sérialise(TokenSession, bufToken, psdBinaire)
fSauveBuffer(sFichierPersistanceAuth, bufToken)
SINON
ListeAjoutePlus(cTypeOk,"Echec du renouvellement de la session")
ListeAjoutePlus(cTypeWarning,"Vous devez reconnecter la boite mail : "+sAdresseMail)
m_Svc.ParamètresSupplémentaires = "prompt=select_account"
TokenSession = AuthIdentifie(m_Svc)
SI TokenSession.Valide ALORS
Sérialise(TokenSession, bufToken, psdBinaire)
SI PAS fSauveBuffer(sFichierPersistanceAuth, bufToken) ALORS
ListeAjoutePlus(cTypeErreur,ErreurInfo())
GOTO Erreur_Label
FIN
SINON
ListeAjoutePlus(cTypeErreur,"Impossible de sérialiser le nouveau Token")
GOTO Erreur_Label
FIN
FIN
FIN
FAIRE
// Erreur de relecture du token
ListeAjoutePlus(cTypeErreur,"Le fichier Token "+sFichierPersistanceAuth+" est invalide")
GOTO Erreur_Label
FIN
FIN
SI PAS TokenSession.Valide ALORS
ListeAjoutePlus(cTypeErreur,"Le fichier Token "+sFichierPersistanceAuth+" n'est plus valide")
GOTO Erreur_Label
FIN
pMaSessionIMAP.AuthToken = TokenSession
SINON
// EmailParamètre(emailParamètreMode, 0)
pMaSessionIMAP..AdresseServeur = sAdresseServeur
pMaSessionIMAP..Nom = sAdresseMail
pMaSessionIMAP..MotDePasse = sPassword
pMaSessionIMAP..Port = sPort
SI sModeSSL = "SSL" ALORS
pMaSessionIMAP..Option = optionSSL
SINON
pMaSessionIMAP..Option = emailOptionSécuriséTLS
FIN
FIN
//Timeout 10s
EmailChangeTimeOut(100)
SI PAS pMaSessionIMAP.OuvreSession() ALORS
ListeAjoutePlus(cTypeErreur,ErreurInfo())
GOTO Erreur_Label
FIN
SI pForceToken ALORS
pMaSessionIMAP.FermeSession()
Info("Token valide")
FIN
RENVOYER Vrai
Erreur_Label:
SI pForceToken ALORS
pMaSessionIMAP.FermeSession()
Erreur("Token invalide")
FIN
RENVOYER Faux
CAS EXCEPTION:
ListeAjoutePlus(cTypeErreur,ExceptionInfo(errComplet))
GOTO Erreur_Label |
Partager