Subversion Repositories wimsdev

Rev

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

# AuthUser
# permet d'authentifier l'utilisateur quser dans la classe qclass

# On commence par verifier la classe $qclass
!read scripts/check.class
!if $error!=$empty
  !exit
!endif

!if hashlogin iswordof $option
  quser_orig=$quser
  !read adm/class/hashlogin $quser_orig,$qclass,
  quser=$login
!endif

# Puis on verifie l'existence de $quser
!read scripts/check.user
!if $error!=$empty
  !if hashlogin iswordof $option
    error=hashlogin: $login
  !endif
  !exit
!endif

!readdef $userdeffile
!if $qpasswd != $empty and $qpasswd != $user_password
  error=user authentification failure
  !exit
!endif

wims_mode=$empty
!readdef $classdeffile

!if $class_type isitemof 2,4
  !default class_superclass=$wims_class
!endif
!default class_typename=class
!default class_type=0

# Il faut tout d'abord verifier que l'utilisateur n'etait pas en session d'examen
parmreg=!record 0 of wimshome/log/classes/$wims_class/.parmreg/$quser.exam
nb_parms=!wordcnt $parmreg

### Schema du fichier .parmreg/user.exam ###
##
##    IP  SESS_ID   ??? exam_ID
## exemple : 134.59.121.121 UI99D09012 1315494761 3
##
############

num_session=$wims_session

# data1 doit contenir l'ip du user et non du serveur appelant
remote_addr=!word 1 of $data1

!if $nb_parms>=4

  !distribute words $parmreg into sess_IP,sess_ID,sess_time,exam_id

  !set r_=!record 0 of wimshome/sessions/$sess_ID/examreg.$exam_id
  !set now=$wims_nowseconds

  !set ws=!translate _ to $ $ in $wims_session
  !set ws=!word 1 of $ws

  !set restrictions=!record 0 of wimshome/log/classes/$wims_class/.E$exam_id

  # Check if user has changed his IP only if option $class_examscore_withoutip is active
  !if $class_examscore_withoutip!=yes
    # if a different exam session has started, is still pending
    # ("$restrictions!=#" i.e. score registration open for all)
    !if $r_!=$empty and $sess_ID!=$ws and $sess_time>$now and $restrictions!=#
      !if $quser != supervisor and $sess_IP != $remote_addr

        !sh rm -f ../sessions/$ws/var.stat >/dev/null
        !if $remote_addr=$empty
          error= $quser is already in an exam session, but your server didn't provided the user actual IP in data1.
        !else
          error= $quser is in an exam session started on another IP. Go back quickly to this computer!
        !endif
        !exit
      !endif
      num_session=$sess_ID
    !endif
  !else
    !if $r_!=$empty and $sess_ID!=$ws and $sess_time>$now and $restrictions!=#
      num_session=$sess_ID
    !endif
  !endif

  #si la session d'examen est terminee, on reinitialise les parametres de session
  !if $sess_time<$now or $r_=$empty
    !writefile wimshome/log/classes/$wims_class/.parmreg/$quser.exam
  !endif

!endif

dir_session=sessions/$num_session

!if $remote_addr!=$empty
  !setdef REMOTE_ADDR=$remote_addr in wimshome/$dir_session/var
!endif


!writefile wimshome/$dir_session/var.stat wims_class=$wims_class\
wims_user=$quser\
wims_firstname=$user_firstname\
wims_lastname=$user_lastname\
wims_email=$user_email\
wims_external_auth=$user_external_auth\
wims_classname=$class_description\
wims_institutionname=$class_institution\
wims_supervisor=$class_supervisor\
wims_supervisormail=$class_email\
wims_css=$class_css\
wims_theme=$class_theme\
wims_theme_icon=$class_theme_icon\
wims_participate=$user_participate\
wims_superclass=$class_superclass\
wims_supervise=$user_supervise\
wims_supertype=$class_type\
wims_typename=$class_typename

!! for supervisors accessing via adm/raw
!! ./adm/class/authprep needs the variable sup_secure to be set
!!
!! (code from modules/home/var.auth and modules/adm/class/classes/var.auth)
!if $quser=supervisor
  sech=$class_secure
  sech=!trim $sech
  !if $sech=$empty
    t=0
  !else
    t=!checkhost $sech
    !if $t<1
      t=-1
    !endif
  !endif
  sup_secure=$t
!else
  !read ./adm/class/raftest
  !if $raftest>$lastallow
    !exit
  !endif
  sup_secure=-1
!endif

!read ./adm/class/authprep $wims_class,$quser
!writefile wimshome/$wims_sesdir/var.stat $classdef

!! the following not needed with lines above
!! !if $quser!=supervisor
!! !appendfile wimshome/$dir_session/var.stat wims_realuser=$quser
!! !endif

!if lightpopup iswordof $option
  !setdef wims_lightpopup=yes in wimshome/$dir_session/var.stat
  !setdef w_wims_lightpopup=yes in wimshome/$dir_session/var
!endif

!sh mkdir $wims_home/$dir_session/getfile

!sh ln -s $wims_home/log/classes/$qclass/src/images $wims_home/$dir_session/getfile/oefimages

!if $quser=supervisor
  !! log supervisor access to class
  date=!translate : to . in $wims_now
  !appendfile wimshome/log/classes/$qclass/.log $date $httpd_REMOTE_ADDR      supervisor login via adm/raw
!endif