次のフォームイベントは、文書編集のためのパスワード保護を提供します。ユーザーは、[PasswordNew] と [PasswordVerify] フィールドに文書のパスワードを入力して、指定します。[PasswordVerify] の [Exiting] イベントは、プレーンなテキストであるパスワードをハッシュし、[PasswordHashed] フィールドに入れます。以降、編集モードの文書の入力を行うときは、ユーザーはフォーム上で最初のフィールドとなる [PasswordChallange] にパスワードを入力する必要があります。[PasswordChallange] の [Exiting] イベントは、PasswordHashed に対して PasswordChallange を検証します。
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