Patch title: Release 94 bulk changes
Abstract:
File: /pliant/protocol/http/proxy.page
Key:
    Removed line
    Added line
module "/pliant/language/unsafe.pli"
module "/pliant/language/stream.pli"
module "proxy.pli"

module "/pliant/fullpliant/user.pli"
module "/pliant/util/crypto/cipher.pli"
module "/pliant/language/type/text/str8.pli"
module "/pliant/admin/md5.pli"
module "/pliant/protocol/http/site.pli"
module "/pliant/protocol/dns/name.pli"

requires "administrator"


title "Extended secured proxy setup"

para
  [User name: ] ; fixed (text http_request:user_name) ; eol
  input "Password: " (var Str password) password noeol
  page button "Start proxy" noeol
    var Str user := http_request user_name
    if user<>"" and password<>""
      if user_secret_database:data:user:user:key_md5<>"" and user_secret_database:data:user:user:key_md5<>string_md5_hexa_signature:(uncipher user_secret_database:data:user:user:private_key password)
      if user_secret_database:data:user:user:key_md5<>"" and user_secret_database:data:user:user:key_md5<>string_md5_hexa_signature:(uncipher (straight_to_Str user_secret_database:data:user:user:private_key) password)
        http_proxy_running := false
        text "Password for '"+user+"' is wrong."
        sleep 1
        return
      http_proxy_user := user
      http_proxy_password := password
      http_proxy_ports := var (Dictionary Str Int) empty_dict
      each s site_database:data:site
        if s:public_key<>""
          var Int port := 80
          if s:port=defined
            port := s port
          eif s:computer<>""
            var Data:NameHost h :> name_database:data:host s:computer
            if h:http_port=defined
              port := h http_port
          http_proxy_ports insert keyof:s port
      each h name_database:data:host
        if h:public_key<>""
          http_proxy_ports insert keyof:h (shunt h:http_port=defined h:http_port (cast 80 Int))
    else
      http_proxy_user := ""
      http_proxy_password := ""
      http_proxy_ports := var (Dictionary Str Int) empty_dict
    http_proxy_browser := http_request browser
    http_proxy_running := true
    reload_page
  button "Stop proxy" noeol
    http_proxy_browser := ""
    http_proxy_running := false
    http_proxy_user := ""
    http_proxy_password := ""
    http_proxy_ports := var (Dictionary Str Int) empty_dict
    reload_page

para
  if not http_proxy_running
    [Secued proxy is currently not running.]
  eif http_proxy_user=""
    [Secured proxy is currently running with no user logged in.]
  else
    [Secured proxy is currently running for user ]
    fixed text:http_proxy_user
    var (Index Str Str) sites
    each p http_proxy_ports
      var Str key
      if ((http_proxy_ports key p) parse any:(var Str name) "." any:(var Str domain) "." any:(var Str area))
        key := domain+"."+area+" "+name
      eif ((http_proxy_ports key p) parse any:(var Str domain) "." any:(var Str area))
        key := domain+"."+area+" "
      else
        key := " "+(http_proxy_ports key p)
      sites insert key (http_proxy_ports key p)
    para
      var Str current := ""
      each s sites
        if ((sites key s) parse any:(var Str domain) _ any:(var Str name))
          if domain<>current
            eol
            current := domain
        link s "http://"+s+"/" ; fixed [  ]
        small
          link "status" "http://"+s+"/pliant/fullpliant/status" ; fixed [ ]
          text name_ip:s ; eol