/*++

Copyright (c) 1996  Microsoft Corporation

Module Name:

    dlgsec.c

Abstract:

    This file implements the dialog proc for the
    security page.  This page captures the account
    name that the fax service runs under.

Environment:

    WIN32 User Mode

Author:

    Wesley Witt (wesw) 17-Feb-1996

--*/

#include "wizard.h"
#pragma hdrstop

#define MY_SET_FOCUS    (WM_USER+1000)


LRESULT
RouteSecurityDlgProc(
    HWND hwnd,
    UINT msg,
    WPARAM wParam,
    LPARAM lParam
    )
{
    switch( msg ) {
        case WM_INITDIALOG:
            SendDlgItemMessage( hwnd, IDC_ACCOUNT_NAME, EM_SETLIMITTEXT, LT_ACCOUNT_NAME, 0 );
            SendDlgItemMessage( hwnd, IDC_PASSWORD,     EM_SETLIMITTEXT, LT_PASSWORD,     0 );
            SendDlgItemMessage( hwnd, IDC_PASSWORD2,    EM_SETLIMITTEXT, LT_PASSWORD,     0 );

            {
                HANDLE hProcess, hAccessToken;
                BYTE InfoBuffer[1000];
                TCHAR szAccountName[200], szDomainName[200];
                PTOKEN_USER pTokenUser = (PTOKEN_USER)InfoBuffer;
                DWORD dwInfoBufferSize,dwAccountSize = 200, dwDomainSize = 200;
                SID_NAME_USE snu;
                hProcess = GetCurrentProcess();
                OpenProcessToken(
                    hProcess,
                    TOKEN_READ,
                    &hAccessToken
                    );
                GetTokenInformation(
                    hAccessToken,
                    TokenUser,
                    InfoBuffer,
                    1000,
                    &dwInfoBufferSize
                    );
                LookupAccountSid(
                    NULL,
                    pTokenUser->User.Sid,
                    szAccountName,
                    &dwAccountSize,
                    szDomainName,
                    &dwDomainSize,
                    &snu
                    );
                _stprintf( (LPTSTR)InfoBuffer, TEXT("%s\\%s"), szDomainName, szAccountName );
                SetDlgItemText( hwnd, IDC_ACCOUNT_NAME, (LPTSTR)InfoBuffer );
            }
            PostMessage( hwnd, MY_SET_FOCUS, 0, (LPARAM) GetDlgItem( hwnd, IDC_PASSWORD ) );
            return FALSE;

        case MY_SET_FOCUS:
            SetFocus( (HWND) lParam );
            SendMessage( (HWND) lParam, EM_SETSEL, 0, MAKELPARAM( 0, -1 ) );
            return FALSE;

        case WM_NOTIFY:
            switch( ((LPNMHDR)lParam)->code ) {
                case PSN_SETACTIVE:
                    if (Unattended) {
                        if (!UnAttendGetAnswer(
                            UAA_ACCOUNT_NAME,
                            (LPBYTE) WizData.AccountName,
                            sizeof(WizData.AccountName)/sizeof(WCHAR)))
                        {
                            WizData.UseLocalSystem = TRUE;
                        } else {
                            if (!UnAttendGetAnswer(
                                UAA_PASSWORD,
                                (LPBYTE) WizData.Password,
                                sizeof(WizData.Password)/sizeof(WCHAR)))
                            {
                                WizData.UseLocalSystem = TRUE;
                            }
                        }

                        SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
                        return TRUE;
                    }
                    if (InstallMode != INSTALL_NEW) {
                        SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
                        return TRUE;
                    }
                    break;

                case PSN_WIZNEXT:
                    {
                        TCHAR ConfirmPassword[64];

                        SendDlgItemMessage(
                            hwnd,
                            IDC_ACCOUNT_NAME,
                            WM_GETTEXT,
                            sizeof(WizData.AccountName),
                            (LPARAM) WizData.AccountName
                            );
                        SendDlgItemMessage(
                            hwnd,
                            IDC_PASSWORD,
                            WM_GETTEXT,
                            sizeof(WizData.Password),
                            (LPARAM) WizData.Password
                            );
                        if (!WizData.AccountName[0]) {
                            PopUpMsg( hwnd, IDS_ACCOUNTNAME, TRUE, 0 );
                            SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
                            return TRUE;
                        }
                        SendDlgItemMessage(
                            hwnd,
                            IDC_PASSWORD2,
                            WM_GETTEXT,
                            sizeof(ConfirmPassword),
                            (LPARAM) ConfirmPassword
                            );
                        if (_tcscmp( ConfirmPassword, WizData.Password ) != 0) {
                            PopUpMsg( hwnd, IDS_PASSWORD, TRUE, 0 );
                            SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
                            PostMessage( hwnd, MY_SET_FOCUS, 0, (LPARAM) GetDlgItem( hwnd, IDC_PASSWORD ) );
                            return TRUE;
                        }

                        if (!_tcschr( WizData.AccountName, TEXT('\\')))  {
                            TCHAR ComputerName[128];
                            DWORD Size = sizeof(ComputerName);
                            if (GetComputerName( ComputerName, &Size )) {
                                _tcscat( ComputerName, TEXT("\\") );
                                _tcscat( ComputerName, WizData.AccountName );
                                _tcscpy( WizData.AccountName, ComputerName );
                                SetDlgItemText( hwnd, IDC_ACCOUNT_NAME, WizData.AccountName );
                            }
                        }
                    }
                    break;

            }
            break;
    }

    return FALSE;
}


LRESULT
SecurityErrorDlgProc(
    HWND hwnd,
    UINT message,
    WPARAM wParam,
    LPARAM lParam
    )
{
    static PSECURITY_INFO SecurityInfo;


    switch( message ) {
        case WM_INITDIALOG:
            SendDlgItemMessage( hwnd, IDC_ACCOUNT_NAME, EM_SETLIMITTEXT, LT_ACCOUNT_NAME, 0 );
            SendDlgItemMessage( hwnd, IDC_PASSWORD,     EM_SETLIMITTEXT, LT_PASSWORD,     0 );
            SendDlgItemMessage( hwnd, IDC_PASSWORD2,    EM_SETLIMITTEXT, LT_PASSWORD,     0 );
            SecurityInfo = (PSECURITY_INFO) lParam;
            SetDlgItemText( hwnd, IDC_ACCOUNT_NAME, (LPTSTR) SecurityInfo->AccountName );
            SetDlgItemText( hwnd, IDC_PASSWORD,     (LPTSTR) SecurityInfo->Password    );
            SetDlgItemText( hwnd, IDC_PASSWORD2,    (LPTSTR) SecurityInfo->Password    );
            break;

        case WM_COMMAND:
            switch( wParam ) {
                case IDCANCEL:
                    EndDialog( hwnd, 0 );
                    return TRUE;

                case IDOK:
                    {
                        TCHAR ConfirmPassword[64];

                        SendDlgItemMessage(
                            hwnd,
                            IDC_ACCOUNT_NAME,
                            WM_GETTEXT,
                            sizeof(SecurityInfo->AccountName),
                            (LPARAM) SecurityInfo->AccountName
                            );
                        SendDlgItemMessage(
                            hwnd,
                            IDC_PASSWORD,
                            WM_GETTEXT,
                            sizeof(SecurityInfo->Password),
                            (LPARAM) SecurityInfo->Password
                            );
                        if (!SecurityInfo->AccountName[0]) {
                            PopUpMsg( hwnd, IDS_ACCOUNTNAME, TRUE, 0 );
                            return TRUE;
                        }
                        SendDlgItemMessage(
                            hwnd,
                            IDC_PASSWORD2,
                            WM_GETTEXT,
                            sizeof(ConfirmPassword),
                            (LPARAM) ConfirmPassword
                            );
                        if (_tcscmp( ConfirmPassword, SecurityInfo->Password ) != 0) {
                            PopUpMsg( hwnd, IDS_PASSWORD, TRUE, 0 );
                            return TRUE;
                        }

                        if (!_tcschr( SecurityInfo->AccountName, TEXT('\\')))  {
                            TCHAR ComputerName[128];
                            DWORD Size = sizeof(ComputerName);
                            if (GetComputerName( ComputerName, &Size )) {
                                _tcscat( ComputerName, TEXT("\\") );
                                _tcscat( ComputerName, SecurityInfo->AccountName );
                                _tcscpy( SecurityInfo->AccountName, ComputerName );
                            }
                        }
                    }
                    EndDialog( hwnd, 1 );
                    return TRUE;
            }
            break;
    }

    return FALSE;
}