Subversion Repositories wimsdev

Rev

Rev 15473 | Blame | Compare with Previous | Last modification | View Log | RSS feed

!read adm/class/classlang names.phtml

wims_prefix=class user tmp n sharing sharable
!read adm/class/authchars
max_addition=100
wims_form_method=post
wims_helper=chapter=3

!read tabletheme

!if $wims_user!=supervisor
  !bound job within user,none default none
!else
  !bound job within class,user,part,none default none
!endif

!defread wimshome/log/classes/$wims_class/.def
!if $class_expiration=$empty
  error=bad_class
  !exit
!endif

part=!trim $part
!if $part=$empty and $job=part
  job=none
!endif

pw1=!items2words $pw1
pw2=!items2words $pw2
pw1=!trim $pw1
pw2=!trim $pw2
pw1=!singlespace $pw1
pw2=!singlespace $pw2

!if $job=none or ($old=$empty and $job notwordof class part) or\
    ($pw1=$empty or $pw2=$empty)
  !exit
!endif

!if $pw1!=$pw2
  error=discord
  !exit
!endif

pw=!char 1 of $pw1
!if $pw=+ and $job=user
  pw1=!char 2 to -1 of $pw1
  pw1=!trim $pw1
  once=true
!endif
t=!wordcnt $pw1
!if $t>1 and $job!=user
  error=bad_pass
  !exit
!endif

n=!charcnt $pw1
!if $n>$max_addition
  error=too_long
  !exit
!endif
!for i=1 to $t
  pw=!word $i of $pw1
  n=!charcnt $pw
  !if $n>$passwd_max
    error=too_long
    !exit
  !endif
  !if $n>0 and $n<$passwd_min
    error=too_short
    !exit
  !endif
  !if $once!=true and $pw=$old
    error=nothing_to_do
    !exit
  !endif
  test=!text select $char_passwd in $pw
  !if $test!=$pw
    error=bad_pass
    !exit
  !endif
!next i

!if $job=part
  !read adm/class/userdef classes,$wims_class,$part
  !defread $userdef
  !if $user_exists!=yes
    error=bad_user
    !exit
  !endif
  pw1=!passcrypt $pw1
  !setdef !set user_password=$pw1 in $userdef
  pass=!getdef user_password in $userdef
  !if $pass=$pw1
    !!should be always the case
    error=success
    wims_module_log=Change participant password: $part by $wims_realuser in $wims_class
    wims_class_log=change password: $part by $wims_realuser
    !setdef !set user_forcechpwd=yes in $userdef
  !else
    error=fail
  !endif
  !exit
!endif

!if $job=user
  !read adm/class/userdef classes,$wims_class,$wims_user
  !if $wims_user=supervisor
    !read var.auth
    !if $error!=$empty
      !exit
    !endif
  !endif
  !defread $userdef
  anc=!word 1 of $user_password
  anc=!passcrypt $anc
  old=!passcrypt $old
  !if $old!=$anc
    error=bad_user_password
    !exit
  !endif
  !if $once=true
    pw1=$anc $pw1
  !endif
  pw1=!passcrypt $pw1
  !setdef !set user_password=$pw1 in $userdef
  pass=!getdef user_password in $userdef
  !if $pass=$pw1
    error=success
    wims_module_log=Change user password: $wims_user $wims_realuser in $wims_class
    !setdef !set user_forcechpwd=no in $userdef
    !if $wims_user=supervisor
      wims_class_log=change password by $wims_realuser
      !read lang/mail.proc.$moduclass_lang
    !endif
  !else
    error=fail
  !endif
  !exit
!endif

!if $job=class
  !if $wims_user!=supervisor
    error=not_supervisor
    !exit
  !endif
  !read var.auth
  !if $error!=$empty
    !exit
  !endif
  !!no verification with the old class_password
  class_pass=!passcrypt $pw1
  !setdef !set class_password=$class_pass in wimshome/log/classes/$wims_class/.def
  passclass_check=!passcheck $pw1 and $class_pass
  !! so the test is always true ??
  !! from the origin, perhaps to be able to check more in the future ??
   !if $passclass_check=yes
    error=success
    wims_module_log=Change class password $wims_class by $wims_realuser in $wims_class.
    wims_class_log=change class password by $wims_realuser
  !else
    error=fail
  !endif
!endif