Advertisement
GrahamC

loginso.reb

Apr 12th, 2014
3,075
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
REBOL 4.23 KB | None | 0 0
  1. rebol [
  2.     file: %loginso.reb
  3.     author: "Graham Chiu"
  4.     date: 12-April-2014
  5.     version: 0.0.1
  6.     notes: {
  7.         parse rule will crash at times
  8.     }
  9. ]
  10.  
  11.  
  12. if not value? 'to-text [
  13.     if not exists? %r3-gui.r3 [
  14.         write %r3-gui.r3 read http://development.saphirion.com/resources/r3-gui.r3
  15.     ]
  16.     do %r3-gui.r3
  17. ]
  18.  
  19. forms: copy []
  20.  
  21.  
  22. ;remove quotes
  23. remove-quotes: func [txt [string!]][
  24.     remove head remove back tail txt
  25. ]
  26.  
  27. ; returns a bunch of pairs
  28. parse-form: funct [txt][
  29.     data: copy []
  30.     alpha: complement charset space
  31.     ; get the form action and method
  32.     parse txt [
  33.         (tmp: copy [])
  34.         thru "action" any space "=" any space copy action some alpha (
  35.             remove-quotes action
  36.             append tmp join get-face sitefld action
  37.         )
  38.         thru "method" any space "=" thru {"} copy method to {"} (
  39.             append tmp method
  40.             append/only data tmp
  41.         )
  42.     ]
  43.     ; now get the input name vaue pairs
  44.     html: decode 'markup to-binary txt
  45.     foreach tagged html [
  46.         trim/head/tail tagged
  47.         parse form tagged [
  48.             "<" any space "input" thru "name" thru "=" thru {"} copy name to {"}
  49.             (repend/only data copy [name ""] value: none)
  50.             thru "value" any space "=" thru {"} copy value to {"} to end
  51.             (if string? value [
  52.                     append remove back tail last data value
  53.                 ]
  54.             )
  55.         ]
  56.     ]
  57.     data
  58. ]
  59.  
  60. view [
  61.     vgroup [
  62.         hgroup [
  63.             label "Site:" sitefld: field "https://stackoverflow.com/users/login"
  64.         ]
  65.         button "Fetch" on-action [
  66.             if error? try [
  67.                 set 'forms copy []
  68.                 page: read to-url get-face sitefld
  69.                 set-face htmldata to-string page
  70.             ][
  71.                 alert "Page read error"
  72.             ]
  73.         ]
  74.     ]
  75.     vgroup [
  76.         label "Page Data"
  77.         htmldata: area
  78.     ]
  79.     hgroup [
  80.         button "Count forms" on-action [
  81.             set 'forms copy []
  82.             if not empty? page: get-face htmldata [
  83.                 cnt: 0
  84.                 alert either parse page [
  85.                     some [
  86.                         to "<form" copy tmp to "</form" (
  87.                             ++ cnt
  88.                             append tmp "</form>"
  89.                             append forms tmp
  90.                         )
  91.                     ] to end
  92.                 ][
  93.                     reform ["Found " cnt "forms"]
  94.                 ]["No forms found"]
  95.  
  96.             ]
  97.         ]
  98.         button "Form 1" on-action [
  99.             view/modal compose [
  100.                 area (pick forms 1)
  101.                 button "Extract Form Data" on-action [
  102.                     if forms/1 [
  103.                         data: parse-form pick forms 1
  104.                         close-window face
  105.                         view/modal compose/deep [
  106.                             text-table 200x200 ["Name" #1 250 "Value" #2 200] [(data)]
  107.                         ]
  108.                     ]
  109.                 ]
  110.             ]
  111.         ]
  112.  
  113.         button "Form 2" on-action [
  114.             view/modal compose [
  115.                 area (pick forms 2)
  116.                 button "Extract Form Data" on-action [
  117.                     if forms/2 [
  118.                         formdata: parse-form pick forms 2
  119.                         set 'postdata copy ""
  120.                         foreach f next formdata [
  121.                             append postdata f/1
  122.                             append postdata "="
  123.                             either empty? f/2 [
  124.                                 append postdata join "$" f/1
  125.                             ][append postdata f/2]
  126.                             append postdata "&"
  127.                         ]
  128.                         remove back tail postdata
  129.  
  130.                         close-window face
  131.                         view/modal compose/deep [
  132.                             text-table 200x200 ["Name" #1 250 "Value" #2 200] [(formdata)]
  133.                             vgroup [
  134.                                 hgroup [label "Email: " emailfld: field]
  135.                                 hgroup [label "Password: " passwordfld: field]
  136.                                 button "Submit" on-action [
  137.                                     probe get-face emailfld
  138.                                     probe get-face passwordfld
  139.                                     ?? postdata
  140.                                 ]
  141.                             ]
  142.                         ]
  143.                     ]
  144.                 ]
  145.             ]
  146.         ]
  147.  
  148.         button "Form 3" on-action [
  149.             view/modal compose [
  150.                 area (pick forms 3)
  151.                 button "Extract Form Data" on-action [
  152.                     if forms/3 [
  153.                         data: parse-form pick forms 3
  154.                         close-window face
  155.                         view/modal compose/deep [
  156.                             text-table 200x200 ["Name" #1 250 "Value" #2 200] [(data)]
  157.                         ]
  158.                     ]
  159.                 ]
  160.             ]
  161.         ]
  162.  
  163.         button "Form 4" on-action [
  164.             view/modal compose [
  165.                 area (pick forms 4)
  166.                 button "Extract Form Data" on-action [
  167.                     if forms/4 [
  168.                         data: parse-form pick forms 4
  169.                         close-window face
  170.                         view/modal compose/deep [
  171.                             text-table 200x200 ["Name" #1 250 "Value" #2 200] [(data)]
  172.                         ]
  173.                     ]
  174.                 ]
  175.             ]
  176.         ]
  177.         button "Form 5" on-action [
  178.             view/modal compose [
  179.                 area (pick forms 5)
  180.                 button "Extract Form Data" on-action [
  181.                     if forms/5 [
  182.                         data: parse-form pick forms 5
  183.                         close-window face
  184.                         view/modal compose/deep [
  185.                             text-table 200x200 ["Name" #1 250 "Value" #2 200] [(data)]
  186.                         ]
  187.                     ]
  188.                 ]
  189.             ]
  190.         ]
  191.     ]
  192. ]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement