view src/auth.cpp @ 5:e3b10fb860b3

release v1.0.
author pyon@macmini
date Mon, 22 Oct 2018 22:17:02 +0900
parents 06342fc544e4
children 9a8b581c1993
line wrap: on
line source

// Filename   : auth.cpp
// Last Change: 2018-10-22 月 16:11:52.
//

#include "id.h"
#include "auth.h"

AuthDialog::AuthDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) 
    : wxDialog( parent, id, title, pos, size, style )
{
    CreateControls();
}

AuthDialog::~AuthDialog()
{
}

// Event Table
BEGIN_EVENT_TABLE( AuthDialog, wxDialog )
	EVT_SHOW( AuthDialog::OnShow )
    EVT_TEXT( ID_UID, AuthDialog::OnCheckUserID )
    EVT_TEXT( ID_PW,  AuthDialog::OnCheckPassword )
    EVT_TEXT_ENTER( ID_UID, AuthDialog::OnEnter )
    EVT_TEXT_ENTER( ID_PW,  AuthDialog::OnEnter )
	EVT_BUTTON( wxID_OK,    AuthDialog::OnEnter )
END_EVENT_TABLE()

// Event Handler
void AuthDialog::OnShow( wxShowEvent& WXUNUSED(event) )
{
}

void AuthDialog::OnCheckUserID( wxCommandEvent& WXUNUSED(event) )
{
    wxString id = m_textCtrlId->GetValue();
	for ( int i = 0; i < m_users.GetCount(); i++ ) {
		if ( id.IsSameAs( m_users[ i ], true ) ) {
			m_staticTextIdmsg->SetLabel( wxT( "ok" ) );
			m_staticTextPwmsg->SetLabel( wxT( "← input" ) );
			m_textCtrlPw->SetValue( wxEmptyString );
			m_textCtrlPw->SetFocus();
			return;
		} else {
			m_staticTextIdmsg->SetLabel( wxT( "← input" ) );
			m_staticTextPwmsg->SetLabel( wxEmptyString );
		}
	}
}

void AuthDialog::OnCheckPassword( wxCommandEvent& WXUNUSED(event) )
{
    wxString pw = m_textCtrlPw->GetValue();
    if ( pw.Len() < 4 ) {
        m_staticTextPwmsg->SetLabel( wxT( "← too short" ) );
    }
    else {
        m_staticTextPwmsg->SetLabel( wxEmptyString );
    }
}

void AuthDialog::OnEnter( wxCommandEvent& WXUNUSED(event) )
{
	m_staticTextPwmsg->SetLabel( wxEmptyString );
	if ( IsValidUser() ) {
		m_user = m_textCtrlId->GetValue();
		EndModal( wxID_OK );
	}
	m_staticTextPwmsg->SetLabel( wxT( "Bad User/Password !!" ) );
	m_textCtrlPw->SelectAll();
	return;
}

// Functions
void AuthDialog::CreateControls( void )
{
    this->SetIcon( wxIcon( wxT( "sample" ) ) );
	this->SetSizeHints( wxDefaultSize, wxDefaultSize );
	this->SetBackgroundColour( wxColour( 0, 150, 230 ) );
	
	wxGridSizer* gSizer = new wxGridSizer( 0, 3, 0, 0 );
	
    // user id
	m_staticTextId = new wxStaticText( this, wxID_ANY, wxT( "User ID" ), wxDefaultPosition, wxDefaultSize, 0 );
	gSizer->Add( m_staticTextId, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
	
	m_textCtrlId = new wxTextCtrl( this, ID_UID, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
	gSizer->Add( m_textCtrlId, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
	
	m_staticTextIdmsg = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
	m_staticTextIdmsg->SetForegroundColour( wxColour( 250, 0, 0 ) );
	gSizer->Add( m_staticTextIdmsg, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
	
    // password
	m_staticTextPw = new wxStaticText( this, wxID_ANY, wxT( "Password" ), wxDefaultPosition, wxDefaultSize, 0 );
	gSizer->Add( m_staticTextPw, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
	
	m_textCtrlPw = new wxTextCtrl( this, ID_PW, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD|wxTE_PROCESS_ENTER );
	gSizer->Add( m_textCtrlPw, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
	
	m_staticTextPwmsg = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
	m_staticTextPwmsg->SetForegroundColour( wxColour( 250, 0, 0 ) );
	gSizer->Add( m_staticTextPwmsg, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );

	// buttons
	gSizer->AddSpacer( 1 );

	m_buttonLogin = new wxButton( this, wxID_OK, wxT( "Login" ), wxDefaultPosition, wxDefaultSize, 0 );
	gSizer->Add( m_buttonLogin, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
	
	m_buttonCancel = new wxButton( this, wxID_CANCEL, wxT( "Cancel" ), wxDefaultPosition, wxDefaultSize, 0 );
	gSizer->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
	
	
	this->SetSizer( gSizer );
	this->Layout();
	gSizer->Fit( this );
	
	this->Centre( wxBOTH );
    m_textCtrlId->SetFocus();
}

bool AuthDialog::LoadDB( void )
{
	// http get ( auth.db, hhs.db, index.db )
	wxArrayString args;
	args.Add( wxT( "client.exe" ) );
	args.Add( wxT( "-u" ) );
	args.Add( m_server );

	wxExecute( wxJoin( args, ' ', '\\' ), wxEXEC_SYNC|wxEXEC_HIDE_CONSOLE );

	// load db
	wxTextFile file;
	if ( !file.Open( wxT( "auth.db" ) ) ) return false;
	for ( int i = 0; i < file.GetLineCount(); i++ ) {
		wxArrayString line = wxSplit( file.GetLine( i ), ' ', '\\' );
		m_users.Add( line[ 0 ] );
	}
	file.Close();
	return true;
}

bool AuthDialog::IsValidUser( void )
{
	wxString id = m_textCtrlId->GetValue();
	wxString pw = m_textCtrlPw->GetValue();

	wxArrayString args;
	args.Add( wxT( "crypto.exe" ) );
	args.Add( wxT( "-c" ) );
	args.Add( wxT( "auth.db" ) );
	args.Add( wxT( "-s" ) );
	args.Add( wxT( "@#!;" ) );	// salt
	args.Add( id );
	args.Add( pw );

	int ret = wxExecute( wxJoin( args, ' ', '\\' ), wxEXEC_SYNC|wxEXEC_HIDE_CONSOLE );
	if ( ret == 39 ) return true;

	return false;
}

void AuthDialog::InDevelop( bool flag )
{
    if ( !flag ) return;
    m_textCtrlId->SetValue( "test" );
    m_textCtrlPw->SetValue( "test" );
    m_textCtrlPw->SetFocus();
}