0
|
1 // Filename : auth.cpp
|
3
|
2 // Last Change: 2018-10-11 木 16:47:30.
|
0
|
3 //
|
|
4
|
|
5 #include "auth.h"
|
|
6
|
|
7 AuthDialog::AuthDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style )
|
|
8 : wxDialog( parent, id, title, pos, size, style )
|
|
9 {
|
|
10 CreateControls();
|
|
11 }
|
|
12
|
|
13 AuthDialog::~AuthDialog()
|
|
14 {
|
|
15 }
|
|
16
|
|
17 // Event Table
|
|
18 BEGIN_EVENT_TABLE( AuthDialog, wxDialog )
|
3
|
19 EVT_SHOW( AuthDialog::OnShow )
|
0
|
20 EVT_TEXT( ID_UID, AuthDialog::OnCheckUserID )
|
|
21 EVT_TEXT( ID_PW, AuthDialog::OnCheckPassword )
|
|
22 EVT_TEXT_ENTER( ID_UID, AuthDialog::OnEnter )
|
|
23 EVT_TEXT_ENTER( ID_PW, AuthDialog::OnEnter )
|
3
|
24 EVT_BUTTON( wxID_OK, AuthDialog::OnEnter )
|
0
|
25 END_EVENT_TABLE()
|
|
26
|
|
27 // Event Handler
|
3
|
28 void AuthDialog::OnShow( wxShowEvent& WXUNUSED(event) )
|
|
29 {
|
|
30 if ( m_load ) return;
|
|
31 wxArrayString args; // http get ( auth.db, hhs.db, index.db )
|
|
32 args.Add( wxT( "client.exe" ) );
|
|
33 args.Add( wxT( "-u" ) );
|
|
34 args.Add( m_server );
|
|
35
|
|
36 wxExecute( wxJoin( args, ' ', '\\' ), wxEXEC_SYNC|wxEXEC_HIDE_CONSOLE );
|
|
37
|
|
38 wxTextFile file;
|
|
39 file.Open( wxT( "auth.db" ) );
|
|
40 for ( int i = 0; i < file.GetLineCount(); i++ ) {
|
|
41 wxArrayString line = wxSplit( file.GetLine( i ), ' ', '\\' );
|
|
42 m_users.Add( line[ 0 ] );
|
|
43 }
|
|
44 file.Close();
|
|
45
|
|
46 m_load = true;
|
|
47 }
|
|
48
|
0
|
49 void AuthDialog::OnCheckUserID( wxCommandEvent& WXUNUSED(event) )
|
|
50 {
|
|
51 wxString id = m_textCtrlId->GetValue();
|
3
|
52 for ( int i = 0; i < m_users.GetCount(); i++ ) {
|
|
53 if ( id.IsSameAs( m_users[ i ], true ) ) {
|
|
54 m_staticTextIdmsg->SetLabel( wxT( "ok" ) );
|
|
55 m_staticTextPwmsg->SetLabel( wxT( "← input" ) );
|
|
56 m_textCtrlPw->SetValue( wxEmptyString );
|
|
57 m_textCtrlPw->SetFocus();
|
|
58 return;
|
|
59 } else {
|
|
60 m_staticTextIdmsg->SetLabel( wxT( "← input" ) );
|
|
61 m_staticTextPwmsg->SetLabel( wxEmptyString );
|
|
62 }
|
|
63 }
|
0
|
64 }
|
|
65
|
|
66 void AuthDialog::OnCheckPassword( wxCommandEvent& WXUNUSED(event) )
|
|
67 {
|
|
68 wxString pw = m_textCtrlPw->GetValue();
|
|
69 if ( pw.Len() < 4 ) {
|
3
|
70 m_staticTextPwmsg->SetLabel( wxT( "← too short" ) );
|
0
|
71 }
|
|
72 else {
|
|
73 m_staticTextPwmsg->SetLabel( wxEmptyString );
|
|
74 }
|
|
75 }
|
|
76
|
|
77 void AuthDialog::OnEnter( wxCommandEvent& WXUNUSED(event) )
|
|
78 {
|
3
|
79 m_staticTextPwmsg->SetLabel( wxEmptyString );
|
|
80 if ( IsValidUser() ) {
|
|
81 m_user = m_textCtrlId->GetValue();
|
|
82 EndModal( wxID_OK );
|
|
83 }
|
|
84 m_staticTextPwmsg->SetLabel( wxT( "Bad User/Password !!" ) );
|
|
85 m_textCtrlPw->SelectAll();
|
|
86 return;
|
0
|
87 }
|
|
88
|
|
89 // Functions
|
|
90 void AuthDialog::CreateControls( void )
|
|
91 {
|
|
92 this->SetIcon( wxIcon( wxT( "sample" ) ) );
|
|
93 this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
|
94 this->SetBackgroundColour( wxColour( 0, 150, 230 ) );
|
|
95
|
|
96 wxGridSizer* gSizer = new wxGridSizer( 0, 3, 0, 0 );
|
|
97
|
|
98 // user id
|
3
|
99 m_staticTextId = new wxStaticText( this, wxID_ANY, wxT( "User ID" ), wxDefaultPosition, wxDefaultSize, 0 );
|
0
|
100 gSizer->Add( m_staticTextId, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
|
|
101
|
|
102 m_textCtrlId = new wxTextCtrl( this, ID_UID, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
|
103 gSizer->Add( m_textCtrlId, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
|
104
|
|
105 m_staticTextIdmsg = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
|
106 m_staticTextIdmsg->SetForegroundColour( wxColour( 250, 0, 0 ) );
|
|
107 gSizer->Add( m_staticTextIdmsg, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
|
108
|
|
109 // password
|
3
|
110 m_staticTextPw = new wxStaticText( this, wxID_ANY, wxT( "Password" ), wxDefaultPosition, wxDefaultSize, 0 );
|
0
|
111 gSizer->Add( m_staticTextPw, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 );
|
|
112
|
|
113 m_textCtrlPw = new wxTextCtrl( this, ID_PW, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD|wxTE_PROCESS_ENTER );
|
|
114 gSizer->Add( m_textCtrlPw, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
|
115
|
|
116 m_staticTextPwmsg = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
|
117 m_staticTextPwmsg->SetForegroundColour( wxColour( 250, 0, 0 ) );
|
|
118 gSizer->Add( m_staticTextPwmsg, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
3
|
119
|
|
120 // buttons
|
|
121 gSizer->AddSpacer( 1 );
|
|
122
|
|
123 m_buttonLogin = new wxButton( this, wxID_OK, wxT( "Login" ), wxDefaultPosition, wxDefaultSize, 0 );
|
|
124 gSizer->Add( m_buttonLogin, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
|
125
|
|
126 m_buttonCancel = new wxButton( this, wxID_CANCEL, wxT( "Cancel" ), wxDefaultPosition, wxDefaultSize, 0 );
|
|
127 gSizer->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
|
128
|
0
|
129
|
|
130 this->SetSizer( gSizer );
|
|
131 this->Layout();
|
|
132 gSizer->Fit( this );
|
|
133
|
|
134 this->Centre( wxBOTH );
|
3
|
135 m_textCtrlId->SetFocus();
|
0
|
136 }
|
|
137
|
3
|
138 bool AuthDialog::IsValidUser( void )
|
|
139 {
|
|
140 wxString id = m_textCtrlId->GetValue();
|
|
141 wxString pw = m_textCtrlPw->GetValue();
|
|
142
|
|
143 wxArrayString args;
|
|
144 args.Add( wxT( "crypto.exe" ) );
|
|
145 args.Add( wxT( "-c" ) );
|
|
146 args.Add( wxT( "auth.db" ) );
|
|
147 args.Add( wxT( "-s" ) );
|
|
148 args.Add( wxT( "@#!;" ) ); // salt
|
|
149 args.Add( id );
|
|
150 args.Add( pw );
|
|
151
|
|
152 int ret = wxExecute( wxJoin( args, ' ', '\\' ), wxEXEC_SYNC|wxEXEC_HIDE_CONSOLE );
|
|
153 if ( ret == 39 ) return true;
|
|
154
|
|
155 return false;
|
|
156 }
|
|
157
|
|
158 void AuthDialog::InDevelop( bool flag )
|
|
159 {
|
|
160 if ( !flag ) return;
|
|
161 m_textCtrlId->SetValue( "test" );
|
|
162 m_textCtrlPw->SetValue( "test" );
|
|
163 m_textCtrlPw->SetFocus();
|
|
164 }
|
|
165
|