Dica Exemplo de WebSpeed acessando rota Rest SSL com CURL OAuth2

Discussão em 'WebSpeed' iniciado por fdantas, Janeiro 14, 2022.

  1. fdantas

    fdantas Administrator Moderador

    Exemplo de WebSpeed acessando rota Rest SSL com CURL

    Código:
        using OpenEdge.Net.HTTP.*.
        using OpenEdge.Net.URI.
        using Progress.Json.ObjectModel.*.
        USING Progress.Lang.Object.
    
        DEFINE VARIABLE i-cod-sistema   AS INTEGER     NO-UNDO INITIAL 8.
        DEFINE VARIABLE i-cod-banco     AS INTEGER     NO-UNDO INITIAL 14.
    
       
        DEFINE INPUT PARAMETER cCode AS CHARACTER.   
        DEFINE INPUT PARAMETER cHostWebSpeed AS CHARACTER.
        DEFINE INPUT PARAMETER cHostLaravel AS CHARACTER.
       
        DEFINE OUTPUT PARAMETER cToken AS CHARACTER.
       
        DEFINE VARIABLE cURL            AS CHARACTER   NO-UNDO.
        DEFINE VARIABLE cPRT            AS CHARACTER   NO-UNDO.
        DEFINE VARIABLE cPATH           AS CHARACTER   NO-UNDO.
        DEFINE VARIABLE iPort           AS INTEGER     NO-UNDO.
        DEFINE VARIABLE cCommand        AS CHARACTER   NO-UNDO.
        DEFINE VARIABLE cLinha          AS CHARACTER   NO-UNDO.
        DEFINE VARIABLE cRes            AS LONGCHAR    NO-UNDO.
        DEFINE VARIABLE authCode        AS CHARACTER   NO-UNDO.
    
        DEFINE VARIABLE oUri            AS URI          NO-UNDO.
        DEFINE VARIABLE oJson           AS JsonObject           NO-UNDO.
        DEFINE VARIABLE oJsonParser     AS ObjectModelParser    NO-UNDO.   
    
           DEFINE VARIABLE client_id            AS CHARACTER   NO-UNDO.
        DEFINE VARIABLE client_secret        AS CHARACTER   NO-UNDO.
        DEFINE VARIABLE redirect_uri         AS CHARACTER   NO-UNDO.
        DEFINE VARIABLE cData AS CHARACTER   NO-UNDO.
        DEFINE VARIABLE jArr           AS JsonArray.
    
        DEFINE TEMP-TABLE tt-data
            FIELD grant_type     as char
            FIELD client_id      as char
            FIELD client_secret  as char
            FIELD redirect_uri   as char
            FIELD CODE           as char SERIALIZE-NAME "code".
    
        FOR FIRST idb-param-integr
            WHERE  idb-param-integr.cod-sistema = i-cod-sistema
            AND    idb-param-integr.cod-banco   = i-cod-banco
            AND    idb-param-integr.ativo
            NO-LOCK,
            EACH idb-param-integr-banco
            WHERE idb-param-integr-banco.cod-banco EQ idb-param-integr.cod-banco
            NO-LOCK:
    
            CASE idb-param-integr-banco.parametro:
                WHEN "URL"       THEN ASSIGN cURL   = idb-param-integr-banco.valor.
                WHEN "PROTOCOLO" THEN ASSIGN cPRT   = idb-param-integr-banco.valor.
                WHEN "PATHGETTOKEN"  THEN ASSIGN cPATH  = idb-param-integr-banco.valor.
                WHEN "PORT"      THEN ASSIGN iPort  = int(idb-param-integr-banco.valor).
                WHEN "client_id"        THEN ASSIGN client_id     =  idb-param-integr-banco.valor.
                WHEN "client_secret"    THEN ASSIGN client_secret =  idb-param-integr-banco.valor.
                WHEN "redirect_uri"     THEN ASSIGN redirect_uri  =  idb-param-integr-banco.valor.       
               
            END CASE.
        END.   
       
        LOG-MANAGER:WRITE-MESSAGE('LoginPortalCode - CODE: ' +  cCode ).  
       
       
        LOG-MANAGER:WRITE-MESSAGE('LoginPortalCode - URL: ' +  cURL ).  
        LOG-MANAGER:WRITE-MESSAGE('LoginPortalCode - PROTOCOLO: ' +  cPRT ).  
        LOG-MANAGER:WRITE-MESSAGE('LoginPortalCode - PATHGETTOKEN: ' +  cPATH ).  
        LOG-MANAGER:WRITE-MESSAGE('LoginPortalCode - client_id: ' +  client_id ).  
        LOG-MANAGER:WRITE-MESSAGE('LoginPortalCode - client_secret: ' +  client_secret ).  
        LOG-MANAGER:WRITE-MESSAGE('LoginPortalCode - redirect_uri: ' +  redirect_uri ).    
    
        IF cURL EQ '' THEN
            RETURN "NOK":U.  
       
        oUri  = new URI(cPRT, cURL).
        oURI:Path = cPATH.
        ASSIGN authCode = cCode  .
       
        CREATE tt-data.
        ASSIGN tt-data.grant_type     = "authorization_code"
               tt-data.client_id      = client_id
               tt-data.client_secret  = client_secret
               tt-data.redirect_uri   = redirect_uri
               tt-data.CODE           = authCode.
              
        jArr = NEW JsonArray().
        TEMP-TABLE tt-data:WRITE-JSON("JsonArray", jArr).      
    
                          
        assign cData = replace(STRING(jArr:GetJsonObject(1):GetJsonText()),'~"','~\~"').
       
       
        LOG-MANAGER:WRITE-MESSAGE('LoginPortalCode - authCode: ' +  authCode ).        
        LOG-MANAGER:WRITE-MESSAGE('LoginPortalCode - cData: ' +  cData ).        
    
        ASSIGN cCommand = SUBSTITUTE('&1 -X POST -H "&2" -H "&3" -d "&4" &5 --insecure --silent --show-error',
                                     SEARCH('curl.exe'),
                                     "Content-Type: application/json",
                                     "Accept: application/json",
                                     cData,
                                     oURI:ToString()                                
                                     ).
    
        LOG-MANAGER:WRITE-MESSAGE('LoginPortalCode - Comando : ' +  cCommand ).                  
    
        INPUT THROUGH VALUE(cCommand) CONVERT SOURCE "UTF-8".
        REPEAT:
            IMPORT UNFORMATTED cLinha NO-ERROR.
            LOG-MANAGER:WRITE-MESSAGE('LoginPortalCode - cLinha : ' +  string(cLinha) ).                  
            ASSIGN cRes = cRes + cLinha + " ".
        END.
        INPUT CLOSE.
    
       
    
        cRes = CODEPAGE-CONVERT(cRes, "UTF-8":U).       
    
        ASSIGN oJsonParser = NEW ObjectModelParser()
               oJson       = CAST(oJsonParser:Parse(cRes), JsonObject).     
    
        LOG-MANAGER:WRITE-MESSAGE('LoginPortalCode - oJson : ' +  string(oJson:GetJsonText()) ).                             
       
        ASSIGN cToken = string(oJson:GetJsonText( 'access_token' ) ).   
       
        LOG-MANAGER:WRITE-MESSAGE('LoginPortalCode - TOKEN' + cToken).
       
        RETURN "OK".
        

Compartilhe esta Página