Patch title: Release 94 bulk changes
Abstract:
File: /pliant/fullpliant/user.page
Key:
    Removed line
    Added line
   
module "/pliant/language/stream.pli"
module "/pliant/admin/md5.pli"
module "/pliant/util/crypto/rsa.pli"
module "/pliant/language/stream.pli"
module "/pliant/admin/md5.pli"
module "/pliant/util/crypto/rsa.pli"
module "/pliant/util/crypto/legal.pli"
module "user.pli"
module "this_computer.pli"
module "login.pli"
module "/pliant/language/context.pli"


para
  note "Users database client and server global settings for
    read_only not allowed:"administrator"
    title "This computer users database settings"
    table columns 1
      cell header [Users database server computers]
      each s this_computer:env:"pliant":"password"
        if (keyof:s parse "server" any)
          cell
            text s
    table columns 1
      cell header [Users database client computers]
      each c this_computer:env:"pliant":"password"
        if (keyof:c parse "client" any)
          cell
            text c
    if allowed:"administrator"
      input "Computer name: " (var Str name) noeol
      button "Add server" noeol
        var Int num := 1
        while exists:(this_computer:env:"pliant":"password" 
          num += 1
        this_computer "pliant" "password" "server"+string:nu
        reload_page
      button "Remove server" noeol
        each s this_computer:env:"pliant":"password"
          if (keyof:s parse "server" any) and s=name
            this_computer:env:"pliant":"password" delete key
        reload_page
      button "Add client" noeol
        var Int num := 1
        while exists:(this_computer:env:"pliant":"password" 
          num += 1
        this_computer "pliant" "password" "client"+string:nu
        reload_page
      button "Remove client"
        each c this_computer:env:"pliant":"password"
          if (keyof:c parse "client" any) and c=name
            this_computer:env:"pliant":"password" delete key
        reload_page
    para
module "user.pli"
module "this_computer.pli"
module "login.pli"
module "/pliant/language/context.pli"


para
  note "Users database client and server global settings for
    read_only not allowed:"administrator"
    title "This computer users database settings"
    table columns 1
      cell header [Users database server computers]
      each s this_computer:env:"pliant":"password"
        if (keyof:s parse "server" any)
          cell
            text s
    table columns 1
      cell header [Users database client computers]
      each c this_computer:env:"pliant":"password"
        if (keyof:c parse "client" any)
          cell
            text c
    if allowed:"administrator"
      input "Computer name: " (var Str name) noeol
      button "Add server" noeol
        var Int num := 1
        while exists:(this_computer:env:"pliant":"password" 
          num += 1
        this_computer "pliant" "password" "server"+string:nu
        reload_page
      button "Remove server" noeol
        each s this_computer:env:"pliant":"password"
          if (keyof:s parse "server" any) and s=name
            this_computer:env:"pliant":"password" delete key
        reload_page
      button "Add client" noeol
        var Int num := 1
        while exists:(this_computer:env:"pliant":"password" 
          num += 1
        this_computer "pliant" "password" "client"+string:nu
        reload_page
      button "Remove client"
        each c this_computer:env:"pliant":"password"
          if (keyof:c parse "client" any) and c=name
            this_computer:env:"pliant":"password" delete key
        reload_page
    para
      button "Broadcast all users accounts"
        each u user
          user_update keyof:u
        reload_page
    para
      [The rule is fairly simple: when a change is applied o
      [Changes to accounts with 'administrator' right are no



table columns 5
  cell header
    [User ID]
  cell header
    [First name]
  cell header
    [Name]
  cell header
    [Description]
  cell
    void
  each u user
    var Str id := keyof u
    cell
      text id
    cell
      text u:first_name
    cell
      text u:name
    cell
      text u:abstract
      if u:homepage<>""
        small
          eol ; link "Homepage" u:homepage
    cell
      page button "Edit"
        read_only not allowed:"administrator"
        title "User '"+id+"'"
        table columns 3 border 0
          cell
            [User ID:]
          cell
            fixed text:id
          cell
            [The string the user uses to authenticate in the
            [An example is] ; fixed [ helene.tonneau]
          cell
            [First name:]
          cell
            input "" u:first_name
          cell void
          cell
            [Name:]
          cell
            input "" u:name
          cell
            [The human readable name of the user.] ; eol
            [An example is] ; fixed [ H鬨ne Tonneau]
          cell
            [Email:]
          cell
            input "" u:email
          cell
            [You may leave it blank if you prefer.]
          cell
            [Home page:]
          cell
            input "" u:homepage
          cell
            [You may leave it blank if you prefer.]
          cell
            [Contact:]
          cell
            text_input "" u:contact rows 5 columns 40
          cell
            [Other ways to contact this user (phone, fax, po
          cell
            [Password:]
          cell
            if allowed:"administrator"
              input "" (var Str password) password
          cell
            [In the users database, only the MD5 digest of t
          cell
            [Public key:]
          cell
            input "" u:public_key length 30 noeol
            if allowed:"administrator"
              button "Generate"
                title "Generate a public/private key pair fo
      [The rule is fairly simple: when a change is applied o
      [Changes to accounts with 'administrator' right are no



table columns 5
  cell header
    [User ID]
  cell header
    [First name]
  cell header
    [Name]
  cell header
    [Description]
  cell
    void
  each u user
    var Str id := keyof u
    cell
      text id
    cell
      text u:first_name
    cell
      text u:name
    cell
      text u:abstract
      if u:homepage<>""
        small
          eol ; link "Homepage" u:homepage
    cell
      page button "Edit"
        read_only not allowed:"administrator"
        title "User '"+id+"'"
        table columns 3 border 0
          cell
            [User ID:]
          cell
            fixed text:id
          cell
            [The string the user uses to authenticate in the
            [An example is] ; fixed [ helene.tonneau]
          cell
            [First name:]
          cell
            input "" u:first_name
          cell void
          cell
            [Name:]
          cell
            input "" u:name
          cell
            [The human readable name of the user.] ; eol
            [An example is] ; fixed [ H鬨ne Tonneau]
          cell
            [Email:]
          cell
            input "" u:email
          cell
            [You may leave it blank if you prefer.]
          cell
            [Home page:]
          cell
            input "" u:homepage
          cell
            [You may leave it blank if you prefer.]
          cell
            [Contact:]
          cell
            text_input "" u:contact rows 5 columns 40
          cell
            [Other ways to contact this user (phone, fax, po
          cell
            [Password:]
          cell
            if allowed:"administrator"
              input "" (var Str password) password
          cell
            [In the users database, only the MD5 digest of t
          cell
            [Public key:]
          cell
            input "" u:public_key length 30 noeol
            if allowed:"administrator"
              button "Generate"
                title "Generate a public/private key pair fo
                var Int bits := min max_legal_key_bits 1024
                var Int bits := 1024
                input "Number of bits: " bits length 4
                input "Key password: " (var Str password) pa
                button "Generate now"
                  rsa_generate "user:"+id bits password
                  goto_backward
                input "Number of bits: " bits length 4
                input "Key password: " (var Str password) pa
                button "Generate now"
                  rsa_generate "user:"+id bits password
                  goto_backward
                if max_legal_key_bits<10000
                  para
                    [This software cannot generate more than
                    [If you live in a country where cryptogr
                para
                  [Generating a long key pair will take a ve
                  [Let's say one hour for a 1024 bits key on
                  [If the key length is double, then the con
              var Int bits := rsa_nbbits u:public_key
              if bits=defined
                small
                  eol ; [The current key is ] ; text string:
          cell
            []
          cell
                para
                  [Generating a long key pair will take a ve
                  [Let's say one hour for a 1024 bits key on
                  [If the key length is double, then the con
              var Int bits := rsa_nbbits u:public_key
              if bits=defined
                small
                  eol ; [The current key is ] ; text string:
          cell
            []
          cell
            [Language:]
          cell
            input "" u:language length 2
          cell
            []
          cell
            [Options:]
          cell
            input "" u:options length 40
          cell
            [Options might be parsed by some specific applic
          cell
            [Styling options:]
          cell
            input "" u:style_options length 40
          cell
            [More options used for specifying user viewing p
          cell
            [Unix user ID:]
          cell
            input "" u:uid
          cell
            []
          cell
            [Computer:]
          cell
            input "" u:computer
          cell
            [If you specify a Unix user ID and computer, the
        table columns 2 border 0
          cell [Description:]
          cell (text_input "" u:abstract rows 5 columns 60)


        [Add all the rights defined in some template account
        table columns 2
          cell header [Line ID]
          cell header [Template account]
          each t u:template
            cell
              text keyof:t
            cell
              input "" t length 30
        if allowed:"administrator"
          input "Line ID: " (var Str tid) length 10 noeol
          button "Add a line" noeol
            u:template create tid
            reload_page
          button "Remove a line"
            u:template delete tid
            reload_page
  
        [The following table enables you to assign maiboxes 
        table columns 2
          cell header [Line ID]
          cell header [Mailbox]
          each m u:mailbox
            cell
              text keyof:m
            cell
              input "" m length 30
        if allowed:"administrator"
          input "Line ID: " (var Str mid) length 10 noeol
          button "Add a line" noeol
            u:mailbox create mid
            reload_page
          button "Remove a line"
            u:mailbox delete mid
            reload_page
  
          para
            page button "Update user informations"
              if password<>""
                user_secret_database:data:user create id
                user_secret_database:data:user:id password_m
              var CBool ok := true
              each c this_computer:env:"pliant":"password"
                if (keyof:c parse "client" any) and c<>compu
            [Options:]
          cell
            input "" u:options length 40
          cell
            [Options might be parsed by some specific applic
          cell
            [Styling options:]
          cell
            input "" u:style_options length 40
          cell
            [More options used for specifying user viewing p
          cell
            [Unix user ID:]
          cell
            input "" u:uid
          cell
            []
          cell
            [Computer:]
          cell
            input "" u:computer
          cell
            [If you specify a Unix user ID and computer, the
        table columns 2 border 0
          cell [Description:]
          cell (text_input "" u:abstract rows 5 columns 60)


        [Add all the rights defined in some template account
        table columns 2
          cell header [Line ID]
          cell header [Template account]
          each t u:template
            cell
              text keyof:t
            cell
              input "" t length 30
        if allowed:"administrator"
          input "Line ID: " (var Str tid) length 10 noeol
          button "Add a line" noeol
            u:template create tid
            reload_page
          button "Remove a line"
            u:template delete tid
            reload_page
  
        [The following table enables you to assign maiboxes 
        table columns 2
          cell header [Line ID]
          cell header [Mailbox]
          each m u:mailbox
            cell
              text keyof:m
            cell
              input "" m length 30
        if allowed:"administrator"
          input "Line ID: " (var Str mid) length 10 noeol
          button "Add a line" noeol
            u:mailbox create mid
            reload_page
          button "Remove a line"
            u:mailbox delete mid
            reload_page
  
          para
            page button "Update user informations"
              if password<>""
                user_secret_database:data:user create id
                user_secret_database:data:user:id password_m
              var CBool ok := true
              each c this_computer:env:"pliant":"password"
                if (keyof:c parse "client" any) and c<>compu
                  if (user_update id u:first_name u:name u:e
                  if (user_update id u:first_name u:name u:email u:abstract user_secret_database:data:user:id:password_md5 u:public_key u:language u:options u:style_options c)=failure
                    text "Failed to forward changes to serve
                    ok := false
              if ok
                goto_backward
          para
            var Int dc := 7
            button "Display '"+id+"' log history" noeol
              title (string dc)+" days history for '"+id+"' 
              detailed_history id dc
            input " on " dc length 2 noeol ; [ days]


                    text "Failed to forward changes to serve
                    ok := false
              if ok
                goto_backward
          para
            var Int dc := 7
            button "Display '"+id+"' log history" noeol
              title (string dc)+" days history for '"+id+"' 
              detailed_history id dc
            input " on " dc length 2 noeol ; [ days]