Examples: HashPassword method
These form events provide password protection for editing a document. The user specifies a document password by entering it in the PasswordNew and PasswordVerify fields. The PasswordVerify Exiting event hashes the plain-text password and places it in the PasswordHashed field. Thereafter upon entry of the document in Edit mode, the user must enter the password in PasswordChallange, the first field on the form. The Exiting event of PasswordChallange verifies PasswordChallange against PasswordHashed.
REM Global declarations
Dim session As NotesSession
Dim ws As NotesUIWorkspace
Dim uidoc As NotesUIDocument
%REM
Fields on this form dealing with passwords:
PasswordHashed - Text - hidden
PasswordChallange - Password - first field on form
PasswordNew - Password
PasswordVerify - Password
%END REM
Sub Postopen(Source As Notesuidocument)
REM Set globals
Set session = New NotesSession
Set ws = New NotesUIWorkspace
Set uidoc = ws.CurrentDocument
REM Skip PasswordChallange field if new doc or no password
If Source.IsNewDoc Or _
Source.FieldGetText("PasswordHashed") = "" Then
Call Source.GotoField("Subject")
End If
End Sub
Sub Querysave(Source As Notesuidocument, Continue As Variant)
REM If user is in PasswordVerify, force the exit event
If Source.CurrentField = "PasswordVerify" Then
Call Source.GotoPrevField
End If
REM Remove plain-text passwords!!!
Call Source.FieldSetText("PasswordChallange", "")
Call Source.FieldSetText("PasswordNew", "")
Call Source.FieldSetText("PasswordVerify", "")
Continue = True
End Sub
REM Exiting event for PasswordChallange field
Sub Exiting(Source As Field)
pw$ = uidoc.FieldGetText("PasswordChallange")
pwhashed$ = uidoc.FieldGetText("PasswordHashed")
REM Do not challange if new doc
If uidoc.IsNewDoc Then Exit Sub
REM Do not challange if no password
If pwhashed$ = "" Then Exit Sub
REM Verify user password against hashed password
If Not session.VerifyPassword(pw$, pwhashed$) Then
Messagebox "Password challange failed",, "Bad password"
Call uidoc.FieldSetText("PasswordChallange", "")
Call uidoc.GotoField("PasswordChallange")
End If
End Sub
REM Exiting event for PasswordVerify field
Sub Exiting(Source As Field)
pwnew$ = uidoc.FieldGetText("PasswordNew")
pwverify$ = uidoc.FieldGetText("PasswordVerify")
REM Remove password if new password is blank
If pwnew$ = "" Then
Call uidoc.FieldSetText("PasswordHashed", "")
Exit Sub
End If
REM Verify new password and hash
If pwnew$ = pwverify$ Then
Call uidoc.FieldSetText("PasswordHashed", _
session.HashPassword(pwnew$))
Else
Messagebox "Verification does not match",, "Bad password"
Call uidoc.FieldSetText("PasswordNew", "")
Call uidoc.FieldSetText("PasswordVerify", "")
Call uidoc.GotoField("PasswordNew")
End If
End Sub