Patch title: Release 85 bulk changes
Abstract:
File: /pliant/util/remote/remote.page
Key:
    Removed line
    Added line
module "/pliant/language/context.pli"
module "/pliant/language/stream.pli"
module "/pliant/fullpliant/this_computer.pli"
module "/pliant/protocol/dns/name.pli"
module "/pliant/protocol/http/site.pli"
module "/pliant/util/network/ping.pli"
module "/pliant/util/encoding/base64.pli"
module "common.pli"

requires "browse_configuration"


title "Remote execution administration"

para
  note "Remote execution global settings for this computer"
    if not allowed:"administrator"
      read_only_mode := true
    read_only not allowed:"administrator"
    title "This computer remote execution settings"
    header "Remote settings"
      table columns 3 border 0
        cell [Remote execution service:]
        cell
          var Str remote := this_computer "pliant" "remote" "service"
          select "" remote
            option "No" "false"
            option "Yes" "true"
        cell [Should we run the remote execution service on this server ?]
    if allowed:"administrator"
      button "Update"
        this_computer "pliant" "remote" "service" := remote
        goto_backward

para
  input "Computer: " (var Str host) noeol
  page button "Test remote access"
    var CBool ok := true
    if name_secret_database:data:host:computer_fullname:private_key=""
      text "This computer has no private key !" ; eol
      ok := false
    eif name_database:data:host:computer_fullname:public_key=""
      text "This computer has no public key !" ; eol
      ok := false
    if site:host:public_key<>"" and name_database:data:host:host:public_key<>""
      text "'"+host+"' is defined both as a web site and as a host in the names database !" ; eol
      ok := false
    eif name_database:data:host:host:public_key=""
      text "This computer does not know '"+host+"' public key !" ; eol
      ok := false
    if net_ping:host=failure
      text "Cannot access '"+host+"' through the network !" ; eol
      ok := false
    else
      var Int port := name_database:data:host:host:remote_port
      (var Stream s) open "tcp://"+host+"/client/"+string:(shunt port=defined port remote_tcp_port) in+out+safe
      if s=failure
        text "Remote execution service is not running on "+host+" !" ; eol
        ok := false
        var Int port := name_database:data:host:host:http_port
        s open "tcp://"+host+"/client/"+(string 500+(shunt port=defined port 80)) in+out+safe
        if s=failure
          text "Neither is Pliant HTTP server secured channel." ; eol
      if s=success
        s writeline "server-site: "+base64_encode:host
        s writeline "client-site: "+base64_encode:computer_fullname
        s writeline "query-server-key"
        s writeline "query-client-key"
        s writeline ""
        while { var Str l := s readline ; l<>"" }
          console l eol
          l parse "server-key" ":" any:(var Str server_public_key)
          l parse "client-key" ":" any:(var Str client_public_key)
        if server_public_key=name_database:data:host:host:public_key
          void
        eif name_database:data:host:host:public_key=""
          text "'"+host+"' says that it's public key is: " ; eol
          fixed text:server_public_key ; eol
        eif server_public_key=""
          text "'"+host+"' does not seem to have a public key !" ; eol
          ok := false
        else
          text "The public key of '"+host+"' on this computer seems to be wrong !" ; eol
          text "'"+host+"' says that it's public key is: " ; eol
          fixed text:server_public_key ; eol
          ok := false
        if client_public_key=name_database:data:host:computer_fullname:public_key
          void
        eif name_database:data:host:computer_fullname:public_key=""
          void # this computer has no public key
        eif client_public_key=""
          text "'"+host+"' does not seem to know this computer public key !" ; eol
          ok := false
        else
          text "The public key of this computer on '"+host+"' is wrong !" ; eol
          text "The right one is: " ; eol
          fixed (text name_database:data:host:computer_fullname:public_key) ; eol
          ok := false
    if ok
      [Everything seems to be ok.]