Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
4 years ago

Custom Connector with Token Refresh

Hi all,

I need to create a Custom Connector to query Prisma Cloud REST API (sadly there isn't already a connector), the platform takes a username and password JSON POST to /login and returns a JWT token, that token then needs to be added to the header when calling for data.

 

Some of the reports I need create are many pages long and the token only lasts around 8 minutes so I need to set a timer to extend the token around the 5 minute mark, to do this I need to issue a GET to /auth_token/extend that will return a new token I can use for another 5 minutes or until my paginator has complete.

 

Once I have my token I can POST my query to /v2/alert which will keep returning json.nextPageToken (that needs to be added to payload.pageToken) until the load is complete

 

I've written a connector for DOMO which is pure JavaScript but I'm new to PowerBI and the M language, I'm assuming this is two complex for the magic functions to help me, any tips would be much appreciated. 

 

Many thanks in advance.

5 Replies

    • Anonymous's avatar
      Anonymous
      Not applicable

      Not writing a connector before the areas I would need help with is. 

      1. Authentication function getting the username and password from the user to get a token, then updating the token after a time (or number of data calls if easier) 

      2. How to create a while loop or similar to keep getting data until the next page is blank. 

      the trippin example uses the magic functions so I wasn't sure how to do this manually. I'm a PHP/JavaScript guy so it's getting my head around the new layout (sorry), I have been looking at the tutorials. 

      • lbendlin's avatar
        lbendlin
        Super User

        I wouldn't worry about #1 just yet, you can sprinkle that in later.  For #2 you can choose between List.Generate, List.Accumulate, and recursive function calls.

  • Anonymous's avatar
    Anonymous
    Not applicable

    Sadly I'm struggling to get out of the gate lol

     

    The authentication is working correctly and returns me a token, which I've stored in token

     loginPayload = [
                username = Extension.CurrentCredential()[Username],
                password = Extension.CurrentCredential()[Password]
            ],
            loginBody = Json.Document(loginPayload),
            responseLogin = Web.Contents("https://api.company.io/login", [
                Headers = [#"Content-Type" = "application/json"],
                Content = loginBody
            ]),
    
            
            token = Json.Document(responseLogin)[token],

     

    I now want to use this to query the endpoint:

     

        responseAlert = Web.Contents("https://company.io/v2/alert", [
                Headers = [
                    #"Content-Type" = "application/json",
                    #"x-redlock-auth" = token
                ],
                Content = alertBody
            ]),
    
            a = Json.Document(responseAlert)

     

     However Power Query keeps complaining "The parameter is expected to be of type Text.Type or Binary.Type", I tried wrapping Record.Field and Text.From but I cannot seem to be able to use my extracted JSON value as a header later down the line, any ideas?