diff src/auth.cpp @ 3:db4813125eb8

many changes.
author pyon@macmini
date Thu, 11 Oct 2018 22:11:09 +0900
parents eaa27e4ed5be
children 06342fc544e4
line wrap: on
line diff
--- a/src/auth.cpp	Tue Oct 02 21:20:05 2018 +0900
+++ b/src/auth.cpp	Thu Oct 11 22:11:09 2018 +0900
@@ -1,5 +1,5 @@
 // Filename   : auth.cpp
-// Last Change: 2018-10-01 Mon 23:15:27.
+// Last Change: 2018-10-11 木 16:47:30.
 //
 
 #include "auth.h"
@@ -8,7 +8,6 @@
     : wxDialog( parent, id, title, pos, size, style )
 {
     CreateControls();
-    LoadUserID();
 }
 
 AuthDialog::~AuthDialog()
@@ -17,31 +16,58 @@
 
 // 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) )
+{
+	if ( m_load ) return;
+	wxArrayString args;	// http get ( auth.db, hhs.db, index.db )
+	args.Add( wxT( "client.exe" ) );
+	args.Add( wxT( "-u" ) );
+	args.Add( m_server );
+
+	wxExecute( wxJoin( args, ' ', '\\' ), wxEXEC_SYNC|wxEXEC_HIDE_CONSOLE );
+
+	wxTextFile file;
+	file.Open( wxT( "auth.db" ) );
+	for ( int i = 0; i < file.GetLineCount(); i++ ) {
+		wxArrayString line = wxSplit( file.GetLine( i ), ' ', '\\' );
+		m_users.Add( line[ 0 ] );
+	}
+	file.Close();
+	
+	m_load = true;
+}
+
 void AuthDialog::OnCheckUserID( wxCommandEvent& WXUNUSED(event) )
 {
     wxString id = m_textCtrlId->GetValue();
-    if ( 1 ) {
-        m_staticTextIdmsg->SetLabel( "ok" );
-        m_staticTextPwmsg->SetLabel( wxT("← input") );
-    }
-    else {
-        m_staticTextIdmsg->SetLabel( wxT("← input") );
-        m_staticTextIdmsg->SetLabel( wxEmptyString );
-    }
+	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") );
+        m_staticTextPwmsg->SetLabel( wxT( "← too short" ) );
     }
     else {
         m_staticTextPwmsg->SetLabel( wxEmptyString );
@@ -50,24 +76,17 @@
 
 void AuthDialog::OnEnter( wxCommandEvent& WXUNUSED(event) )
 {
-    Close();
+	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::LoadUserID( void )
-{
-    // ファイルから UserID を読み込む
-}
-
-void AuthDialog::InDevelop( bool flag )
-{
-    if ( !flag ) return;
-    SetTitle( "now on test" );
-    m_textCtrlId->SetValue( "test" );
-    m_textCtrlPw->SetValue( "test" );
-    m_textCtrlPw->SetFocus();
-}
-
 void AuthDialog::CreateControls( void )
 {
     this->SetIcon( wxIcon( wxT( "sample" ) ) );
@@ -77,7 +96,7 @@
 	wxGridSizer* gSizer = new wxGridSizer( 0, 3, 0, 0 );
 	
     // user id
-	m_staticTextId = new wxStaticText( this, wxID_ANY, wxT("User ID"), wxDefaultPosition, wxDefaultSize, 0 );
+	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 );
@@ -88,7 +107,7 @@
 	gSizer->Add( m_staticTextIdmsg, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
 	
     // password
-	m_staticTextPw = new wxStaticText( this, wxID_ANY, wxT("Password"), wxDefaultPosition, wxDefaultSize, 0 );
+	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 );
@@ -97,11 +116,50 @@
 	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::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();
+}
+