Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace AutoOrder.OrderMonitoring
- open System
- open System.Collections.Specialized
- open System.Text
- open System.Collections.Generic
- type LoginDetails = { Username : string; Password : string }
- type SecretQuestion = string
- type SecretAnswer = string
- type OrderMonitor() =
- let loginAddress = """https://bpofulfillment.com/api/login/ClientRequest"""
- let ordersAddress = """https://bpofulfillment.com/BpoMgnt/Default.aspx"""
- let client = new CookieClient()
- let mutable lastLoginTime : option<DateTime> = None
- member x.GetOrders() : List<string> =
- let res = client.DownloadString(ordersAddress)
- new List<string>()
- member x.Login (loginCallback: Func<LoginDetails>, secretCallback: Func<SecretQuestion, SecretAnswer>) : bool =
- let jsonRequest(address:string) (content: string) : string =
- client.Headers.Add("content-type", "application/json")
- client.UploadString(address, content)
- let answerSecret (response: string) =
- let arr = response.Split([|"\\\""|], StringSplitOptions.None)
- let question = arr.[3]
- let number = arr.[6].Substring(1, 1)
- let answer = secretCallback.Invoke(question)
- let secretRequest = sprintf """{"Context":"SecurityQuestionsAuth.html","Action":"Security.AuthComputerSubmitPrc",
- "Data":{"Question":"%s","QuestionAnswer":"%s","QuestionNum":%s}}""" question answer number
- let res = jsonRequest loginAddress secretRequest
- if res.Contains("Authorized") then true else false
- let processSecret() =
- let secretRequest = """{"Context":"SecurityQuestionsAuth.html","Action":"Security.AuthComputerInitPrc","Data":null}
- Response Headersview source"""
- let res = jsonRequest loginAddress secretRequest
- if res.Contains("Question") then answerSecret(res)
- else false
- let values = NameValueCollection()
- let { Password = password; Username = username } = loginCallback.Invoke()
- let loginRequest = sprintf """{"Context":"Login.html","Action":"Security.AuthenticateLogin","Data":{"UserName"
- :"%s","Password":"%s","ReturnUrl":"/Bpomgnt/Default.aspx"}}""" username password
- let res = jsonRequest loginAddress loginRequest
- let success = if res.Contains("AuthComputer") then processSecret() else false
- if success then lastLoginTime <- Some DateTime.Now
- success
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement