パスワードの変更をプログラムで行ってみよう

皆さん、こんにちは。
今日もヘルプに載っていない機能についての話です。

今回は、NotesSessionクラスのChangePasswordメソッドです。


1.構文

まずは、いつものようにコードアシスタントで構文を確認してみましょう。
ChangePasswordの構文
戻り値がBooleanなので、成功したらTrue、失敗したらFalseが返ってくることが想像できます。
引数は、「Filepath」「Oldpassword」「Newpassword」の3つです。それぞれString型になっているので、
「Filepath」はIDファイルのパス
「Oldpassword」は現在のパスワード
「Newpassword」は変更後のパスワード
を指定することが想像できます。

2.使用方法

これだけの機能であれば、Notesクライアントの「パスワードの変更」でいいんじゃないか?という気がします・・・
Notesクライアントのパスワードの変更


それでも、このような機能が提供されているのには意味があるのだろう・・・
ということでサンプルを作成してみました。

3.サンプル

 今回のサンプルはコードのみですが、実際には画面(フォームおよびサブフォーム)も必要になります。

Sub subChangePasswordTest()
    On Error GoTo ErrProc
    
    Dim uiws           As New NotesUIWorkspace
    Dim session        As New NotesSession
    Dim varFilePath    As     Variant
    Dim dbCurrent      As     NotesDatabase
    Dim docDummy       As     NotesDocument
    Dim strOldPassword As     String
    Dim strNewPassword As     String
    Dim docPassword    As     NotesDocument
    Dim ritemOld       As     NotesRichTextItem
    Dim ritemNew       As     NotesRichTextItem
    Dim embedIDFile    As     NotesEmbeddedObject
    
    'IDファイルの選択
    varFilePath = uiws.OpenFileDialog( False, "IDファイルの選択", "IDファイル|*.id" )
    
    Set dbCurrent = session.CurrentDatabase
    Set docDummy  = dbCUrrent.CreateDocument()
    '古いパスワードと新しいパスワードの入力
    If uiws.DialogBox( "subfInputPassword", True, True, False, False, False, False, "パスワードの入力", docDummy, True, False, False ) = False Then
        Error 1000, "パスワードが入力されていません。"
    End If
    
    '入力パスワードの確認
    If docDummy.NewPassword(0) <> docDummy.NewPasswordConfirm(0) Then
        Error 1001, "新パスワードが異なっています。"
    End If
    
    strOldPassword = docDummy.OldPassword(0)
    strNewPassword = docDummy.NewPassword(0)
    
    '変更前後のIDファイルを文書として登録する
    Set docPassword = dbCurrent.CreateDocument()
    Call docPassword.ReplaceItemValue( "Form", "fmChangePassword" )
    Set ritemOld = New NotesRichTextItem( docPassword, "OldIDFile" )
    Set embedIDFile = ritemOld.EmbedObject( EMBED_ATTACHMENT, "", varFilePath(0) )
    
    'パスワードの変更
    If session.ChangePassword( varFilePath(0), strOldPassword, strNewPassword ) = True Then
        MsgBox "パスワードを変更しました。", 0 + 64, MSGTITLE
    Else
        Error 1002, "パスワードの変更に失敗しました。"
    End If
    
    '変更前後のIDファイルを文書として登録する
    Call docPassword.ReplaceItemValue( "OldPassword", strOldPassword )
    Call docPassword.ReplaceItemValue( "NewPassword", strNewPassword )
    Set ritemNew = New NotesRichTextItem( docPassword, "NewIDFile" )
    Set embedIDFile = ritemNew.EmbedObject( EMBED_ATTACHMENT, "", varFilePath(0) )
    Call docPassword.Save( True, True, True )
    
    Exit Sub
    
ErrProc:
    MsgBox _
    "エラー行数:" & CStr(Erl) & Chr$(10) & _
    "エラー番号:" & CStr(Err) & Chr$(10) & _
    "エラー内容:" & Error, _
    0 + 16, MSGTITLE
    
    Exit Sub
End Sub



実行結果は次のようになります。
まず、IDファイルを選択するダイアログが表示されるので、パスワードを変更したいIDファイルを選択します。
IDファイルの選択

次に現在のパスワードと変更後のパスワードを入力するダイアログが表示されるので、それぞれ入力して[OK]をクリックします。
新しいパスワードは2回入力するようにしました。
パスワードの入力

パスワードの変更に成功すると、次のようなダイアログが表示されます。
パスワードの変更に成功した

この後、 ビューを見るとパスワード及び新旧のIDファイルを格納した文書が表示されています。
パスワード格納文書ビュー

文書を開くと、新旧のパスワード及びIDファイルが格納されています。
パスワード格納文書


4.考察

サンプルを作ってみましたが、今一つですね。
IDファイルからユーザー名や認証期限などが取得できれば、まだ使いどころはある気がしますが。

サンプルDBが欲しいという方は直接ご連絡ください。
今回のNotes DBに限り、無償にて提供いたします。




それでは今日はこの辺で・・・






Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
HCL Ambassadorの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

コメント