Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2015
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 2.55 KB | None | 0 0
  1. namespace AutoOrder.OrderMonitoring
  2.  
  3. open System
  4. open System.Collections.Specialized
  5. open System.Text
  6. open System.Collections.Generic
  7.  
  8. type LoginDetails = { Username : string; Password : string }
  9. type SecretQuestion = string
  10. type SecretAnswer = string
  11.  
  12. type OrderMonitor() =
  13.     let loginAddress = """https://bpofulfillment.com/api/login/ClientRequest"""
  14.     let ordersAddress = """https://bpofulfillment.com/BpoMgnt/Default.aspx"""
  15.     let client = new CookieClient()
  16.     let mutable lastLoginTime : option<DateTime> = None
  17.  
  18.     member x.GetOrders() : List<string> =
  19.         let res = client.DownloadString(ordersAddress)
  20.         new List<string>()
  21.  
  22.     member x.Login (loginCallback: Func<LoginDetails>, secretCallback: Func<SecretQuestion, SecretAnswer>) : bool =
  23.         let jsonRequest(address:string) (content: string) : string =
  24.             client.Headers.Add("content-type", "application/json")
  25.             client.UploadString(address, content)
  26.  
  27.         let answerSecret (response: string) =
  28.             let arr = response.Split([|"\\\""|], StringSplitOptions.None)
  29.             let question = arr.[3]
  30.             let number = arr.[6].Substring(1, 1)
  31.             let answer = secretCallback.Invoke(question)
  32.             let secretRequest = sprintf """{"Context":"SecurityQuestionsAuth.html","Action":"Security.AuthComputerSubmitPrc",
  33.                                "Data":{"Question":"%s","QuestionAnswer":"%s","QuestionNum":%s}}""" question answer number
  34.             let res = jsonRequest loginAddress secretRequest
  35.             if res.Contains("Authorized") then true else false
  36.  
  37.         let processSecret() =
  38.             let secretRequest = """{"Context":"SecurityQuestionsAuth.html","Action":"Security.AuthComputerInitPrc","Data":null}
  39.                                    Response Headersview source"""
  40.             let res = jsonRequest loginAddress secretRequest
  41.             if res.Contains("Question") then answerSecret(res)
  42.             else false
  43.  
  44.         let values = NameValueCollection()
  45.         let { Password = password; Username = username } = loginCallback.Invoke()
  46.         let loginRequest = sprintf """{"Context":"Login.html","Action":"Security.AuthenticateLogin","Data":{"UserName"  
  47.                                 :"%s","Password":"%s","ReturnUrl":"/Bpomgnt/Default.aspx"}}""" username password
  48.  
  49.  
  50.  
  51.         let res = jsonRequest loginAddress loginRequest
  52.  
  53.         let success = if res.Contains("AuthComputer") then processSecret() else false
  54.        
  55.         if success then lastLoginTime <- Some DateTime.Now
  56.  
  57.         success
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement