PureBasic
PureBasic
Duo Auth API - Preauth
See more Duo Auth MFA Examples
The /preauth endpoint determines whether a user is authorized to log in, and (if so) returns the user's available authentication factors.Chilkat PureBasic Downloads
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkHttpRequest.pb"
Procedure ChilkatExample()
success.i = 0
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
integrationKey.s = "DIMS3V5QDVG9J9ABRXC4"
secretKey.s = "HWVQ46nubLBxhnRlKddTltWIi3hL0fIQF2qTvLab"
http.i = CkHttp::ckCreate()
If http.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHttp::setCkAccept(http, "application/json")
; Use your own hostname here:
url.s = "https://api-a03782e1.duosecurity.com/auth/v2/preauth"
CkHttp::setCkLogin(http, integrationKey)
CkHttp::setCkPassword(http, secretKey)
req.i = CkHttpRequest::ckCreate()
If req.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHttpRequest::ckAddParam(req,"username","matt")
CkHttpRequest::setCkHttpVerb(req, "POST")
CkHttpRequest::setCkContentType(req, "application/x-www-form-urlencoded")
resp.i = CkHttpResponse::ckCreate()
If resp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkHttp::ckHttpReq(http,url,req,resp)
If success = 0
Debug CkHttp::ckLastErrorText(http)
CkHttp::ckDispose(http)
CkHttpRequest::ckDispose(req)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
Debug "status code = " + Str(CkHttpResponse::ckStatusCode(resp))
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkJsonObject::ckLoad(json,CkHttpResponse::ckBodyStr(resp))
CkJsonObject::setCkEmitCompact(json, 0)
Debug CkJsonObject::ckEmit(json)
; Sample successful output:
; status code = 200
; {
; "response": {
; "devices": [
; {
; "capabilities": [
; "auto",
; "push",
; "sms",
; "mobile_otp"
; ],
; "device": "DP6GYVTQ5NK82BMR851F",
; "display_name": "iOS (XXX-XXX-1871)",
; "name": "",
; "number": "XXX-XXX-1871",
; "type": "phone"
; }
; ],
; "result": "auth",
; "status_msg": "Account is active"
; },
; "stat": "OK"
; }
; Sample code to parse the above JSON response..
; Use this online tool to generate parsing code from sample JSON:
; Generate Parsing Code from JSON
device.s
display_name.s
name.s
number.s
v_type.s
j.i
count_j.i
strVal.s
responseResult.s = CkJsonObject::ckStringOf(json,"response.result")
responseStatus_msg.s = CkJsonObject::ckStringOf(json,"response.status_msg")
stat.s = CkJsonObject::ckStringOf(json,"stat")
i.i = 0
count_i.i = CkJsonObject::ckSizeOfArray(json,"response.devices")
While i < count_i
CkJsonObject::setCkI(json, i)
device = CkJsonObject::ckStringOf(json,"response.devices[i].device")
display_name = CkJsonObject::ckStringOf(json,"response.devices[i].display_name")
name = CkJsonObject::ckStringOf(json,"response.devices[i].name")
number = CkJsonObject::ckStringOf(json,"response.devices[i].number")
v_type = CkJsonObject::ckStringOf(json,"response.devices[i].type")
j = 0
count_j = CkJsonObject::ckSizeOfArray(json,"response.devices[i].capabilities")
While j < count_j
CkJsonObject::setCkJ(json, j)
strVal = CkJsonObject::ckStringOf(json,"response.devices[i].capabilities[j]")
j = j + 1
Wend
i = i + 1
Wend
CkHttp::ckDispose(http)
CkHttpRequest::ckDispose(req)
CkHttpResponse::ckDispose(resp)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndProcedure