例: HashPassword method

次のフォームイベントは、文書編集のためのパスワード保護を提供します。ユーザーは、[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