dragons_keep 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +29 -0
- data/LICENSE +3 -0
- data/README +3 -0
- data/Rakefile +59 -0
- data/bin/dragons_keep +17 -0
- data/bin/dragons_keep.bat +1 -0
- data/db/migrations/201005101750_create_accounts.rb +19 -0
- data/lib/dragons_keep.rb +33 -0
- data/lib/dragons_keep/account.rb +99 -0
- data/lib/dragons_keep/account_controller.rb +85 -0
- data/lib/dragons_keep/account_dialog.rb +103 -0
- data/lib/dragons_keep/generate_password_dialog.rb +35 -0
- data/lib/dragons_keep/icons/lock_add.png +0 -0
- data/lib/dragons_keep/icons/lock_add.xpm +182 -0
- data/lib/dragons_keep/icons/lock_delete.png +0 -0
- data/lib/dragons_keep/icons/lock_delete.xpm +189 -0
- data/lib/dragons_keep/icons/lock_edit.png +0 -0
- data/lib/dragons_keep/icons/lock_edit.xpm +200 -0
- data/lib/dragons_keep/icons/user_add.png +0 -0
- data/lib/dragons_keep/icons/user_delete.png +0 -0
- data/lib/dragons_keep/icons/user_edit.png +0 -0
- data/lib/dragons_keep/keeps_main.rb +238 -0
- metadata +149 -0
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,238 @@
|
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
|
4
|
+
require 'wx'
|
5
|
+
require 'dragons_keep/account_dialog'
|
6
|
+
require 'dragons_keep/account_controller'
|
7
|
+
|
8
|
+
module DragonsKeep
|
9
|
+
class KeepsMain < Wx::Frame
|
10
|
+
ID_FILE_NEW = 1001
|
11
|
+
ID_FILE_CONNECT = 1002
|
12
|
+
ID_FILE_DISCONNECT = 1003
|
13
|
+
ID_ACCOUNT_NEW = 3001
|
14
|
+
ID_ACCOUNT_EDIT = 3002
|
15
|
+
ID_ACCOUNT_DELETE = 3003
|
16
|
+
ID_EDIT_COPY = 2001
|
17
|
+
ID_TOOL_NEW_ACCOUNT = 101
|
18
|
+
ID_TOOL_EDIT_ACCOUNT = 102
|
19
|
+
ID_TOOL_DELETE_ACCOUNT = 103
|
20
|
+
|
21
|
+
|
22
|
+
def initialize(title)
|
23
|
+
#create an instance of frame
|
24
|
+
super(nil, :title => title, :size => [ 400, 300 ])
|
25
|
+
@account_controller = nil
|
26
|
+
create_menu_bar
|
27
|
+
# Create status bar with one cell
|
28
|
+
create_status_bar(1)
|
29
|
+
create_tb
|
30
|
+
create_contents
|
31
|
+
register_events
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
# End the application; it should finish automatically when the last
|
36
|
+
# window is closed.
|
37
|
+
def on_quit
|
38
|
+
close()
|
39
|
+
end
|
40
|
+
def on_new_database
|
41
|
+
file_dialog = Wx::FileDialog.new(self, "Choose File for new Database", :wildcard=>"Keep Files(*.keep)|*.keep", :style=>Wx::FD_SAVE)
|
42
|
+
file_dialog.center_on_screen(Wx::BOTH)
|
43
|
+
if file_dialog.show_modal == Wx::ID_OK
|
44
|
+
password_dialog = Wx::PasswordEntryDialog.new(self, "Please enter a password for this database")
|
45
|
+
if password_dialog.show_modal == Wx::ID_OK
|
46
|
+
password = password_dialog.get_value
|
47
|
+
file = file_dialog.get_path
|
48
|
+
if (file=~/.keep$/) == nil
|
49
|
+
file << ".keep"
|
50
|
+
end
|
51
|
+
#puts file
|
52
|
+
@account_controller = AccountController.new file, password
|
53
|
+
@account_controller.establish_connection
|
54
|
+
load_list
|
55
|
+
# update_ui
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
def on_connect_database
|
60
|
+
file_dialog = Wx::FileDialog.new(self, "Choose Keep File", :wildcard=>"Keep Files(*.keep)|*.keep")
|
61
|
+
file_dialog.center_on_screen(Wx::BOTH)
|
62
|
+
if file_dialog.show_modal == Wx::ID_OK
|
63
|
+
password_dialog = Wx::PasswordEntryDialog.new(self, "Please enter the password for this database")
|
64
|
+
if password_dialog.show_modal == Wx::ID_OK
|
65
|
+
password = password_dialog.get_value
|
66
|
+
file = file_dialog.get_path
|
67
|
+
#puts file
|
68
|
+
begin
|
69
|
+
@account_controller = AccountController.new file, password
|
70
|
+
@account_controller.establish_connection
|
71
|
+
load_list
|
72
|
+
rescue PasswordException
|
73
|
+
dlg = Wx::MessageDialog.new(self, "The Password you entered is invalid", "Password", Wx::OK | Wx::ICON_ERROR)
|
74
|
+
dlg.show_modal()
|
75
|
+
@account_controller = nil
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def on_disconnect
|
82
|
+
@account_controller = nil
|
83
|
+
@list = nil
|
84
|
+
@account_list.clear
|
85
|
+
end
|
86
|
+
|
87
|
+
def on_new_account
|
88
|
+
account_dialog = AccountDialog.new(self, -1, "New Account")
|
89
|
+
account_dialog.center_on_screen(Wx::BOTH)
|
90
|
+
account_dialog.account = Account.new
|
91
|
+
if account_dialog.show_modal()== Wx::ID_OK
|
92
|
+
@account_controller.save!(account_dialog.account)
|
93
|
+
load_list
|
94
|
+
end
|
95
|
+
end
|
96
|
+
def on_edit_account
|
97
|
+
begin
|
98
|
+
account = @list[@account_list.get_selection]
|
99
|
+
@account_controller.decrypt!(account)
|
100
|
+
account_dialog = AccountDialog.new(self, -1, "Edit Account")
|
101
|
+
account_dialog.center_on_screen(Wx::BOTH)
|
102
|
+
account_dialog.account = account
|
103
|
+
if account_dialog.show_modal()== Wx::ID_OK
|
104
|
+
@account_controller.save!(account_dialog.account)
|
105
|
+
load_list
|
106
|
+
end
|
107
|
+
rescue PasswordException
|
108
|
+
dlg = Wx::MessageDialog.new(self, "The Password you entered is invalid", "Password", Wx::OK | Wx::ICON_ERROR)
|
109
|
+
dlg.show_modal()
|
110
|
+
end
|
111
|
+
end
|
112
|
+
def on_delete_account
|
113
|
+
account = @list[@account_list.get_selection]
|
114
|
+
dlg = Wx::MessageDialog.new(self, "Are you sure you wish to delete account #{account.name}", "Dragon's Keep", Wx::YES | Wx::NO | Wx::ICON_QUESTION)
|
115
|
+
if dlg.show_modal() == Wx::ID_YES
|
116
|
+
@account_controller.delete account
|
117
|
+
load_list
|
118
|
+
end
|
119
|
+
end
|
120
|
+
def on_copy_password
|
121
|
+
account = @list[@account_list.get_selection]
|
122
|
+
@account_controller.decrypt!(account)
|
123
|
+
Wx::Clipboard.open do | clip |
|
124
|
+
clip.data = Wx::TextDataObject.new(account.unencrypted_password)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
private
|
129
|
+
|
130
|
+
def load_list
|
131
|
+
@list = @account_controller.list
|
132
|
+
@account_list.clear
|
133
|
+
@list.each {|ele| @account_list.append(ele.name) }
|
134
|
+
end
|
135
|
+
|
136
|
+
# helper to load png
|
137
|
+
def load_bitmap(base_name, mode)
|
138
|
+
|
139
|
+
png_file = File.join( File.dirname(__FILE__), 'icons', base_name )
|
140
|
+
#png_file = "dragons_keep/icons/#{base_name}"
|
141
|
+
# puts "image : #{png_file}"
|
142
|
+
Wx::Bitmap.new(png_file, mode ) # Wx::BITMAP_TYPE_PNG
|
143
|
+
end
|
144
|
+
|
145
|
+
# Create the Tool bar
|
146
|
+
def create_tb
|
147
|
+
tb = self.create_tool_bar(Wx::TB_HORIZONTAL | Wx::NO_BORDER | Wx::TB_FLAT ) #| Wx::TB_TEXT
|
148
|
+
tb.add_tool ID_TOOL_NEW_ACCOUNT, "New", load_bitmap("lock_add.png", Wx::BITMAP_TYPE_PNG), "New Account"
|
149
|
+
tb.add_tool ID_TOOL_EDIT_ACCOUNT, "Edit", load_bitmap("lock_edit.png", Wx::BITMAP_TYPE_PNG), "Edit Account"
|
150
|
+
tb.add_tool ID_TOOL_DELETE_ACCOUNT, "Delete", load_bitmap("lock_delete.png", Wx::BITMAP_TYPE_PNG), "Delete Account"
|
151
|
+
# needed to make the tool bar appear on windows
|
152
|
+
tb.realize()
|
153
|
+
|
154
|
+
end
|
155
|
+
def create_menu_bar
|
156
|
+
# create menu bar
|
157
|
+
menu_bar = Wx::MenuBar.new
|
158
|
+
# Create File menu
|
159
|
+
menu_file = Wx::Menu.new
|
160
|
+
# Create New option on File menu
|
161
|
+
menu_file.append ID_FILE_NEW, "&New Keep...", "Create New Keep File"
|
162
|
+
# Create Connect option on File menu
|
163
|
+
menu_file.append ID_FILE_CONNECT, "&Connect Keep...", "Connect to Existing Keep File"
|
164
|
+
# Create Disconnect menu option
|
165
|
+
menu_file.append ID_FILE_DISCONNECT, "Disconnect Keep", "Disconnect From the Keep File"
|
166
|
+
# add menu spacer to file menu
|
167
|
+
menu_file.append_separator()
|
168
|
+
# create Account menu
|
169
|
+
menu_account = Wx::Menu.new
|
170
|
+
# create new account menu item
|
171
|
+
menu_account.append ID_ACCOUNT_NEW, "New &Account...", "Create a new Account"
|
172
|
+
# Create Edit Account menu item
|
173
|
+
menu_account.append ID_ACCOUNT_EDIT, "Edit Account...", "Edit Selected Account"
|
174
|
+
menu_account.append ID_ACCOUNT_DELETE, "Delete Account", "Delete Selected Account"
|
175
|
+
# menu_file.append_separator()
|
176
|
+
#Create Exit option on File Menu
|
177
|
+
menu_file.append Wx::ID_EXIT, "E&xit\tAlt-X", "Quit this program"
|
178
|
+
# add the file to the menu bar
|
179
|
+
menu_bar.append menu_file, "&File"
|
180
|
+
# Create Edit menu
|
181
|
+
menu_edit = Wx::Menu.new
|
182
|
+
menu_edit.append ID_EDIT_COPY, "Copy Password", "Copy Password to Clipboard"
|
183
|
+
# add edit menu to menu bar
|
184
|
+
menu_bar.append menu_edit, "Edit"
|
185
|
+
# add the account menu to the menu bar
|
186
|
+
menu_bar.append menu_account, "Account"
|
187
|
+
# add Menu Bar to Frame
|
188
|
+
self.menu_bar = menu_bar
|
189
|
+
end
|
190
|
+
|
191
|
+
def create_contents
|
192
|
+
hbox = Wx::HBoxSizer.new
|
193
|
+
@account_list = Wx::ListBox.new self, 101, :style=>Wx::LB_SINGLE
|
194
|
+
hbox.add(@account_list,1, Wx::EXPAND | Wx::ALL)
|
195
|
+
self.set_sizer(hbox)
|
196
|
+
end
|
197
|
+
|
198
|
+
def register_events
|
199
|
+
evt_menu Wx::ID_EXIT, :on_quit
|
200
|
+
evt_menu ID_FILE_NEW, :on_new_database
|
201
|
+
evt_menu ID_FILE_CONNECT, :on_connect_database
|
202
|
+
evt_menu ID_FILE_DISCONNECT, :on_disconnect
|
203
|
+
evt_menu ID_EDIT_COPY, :on_copy_password
|
204
|
+
evt_menu ID_ACCOUNT_NEW, :on_new_account
|
205
|
+
evt_menu ID_ACCOUNT_EDIT, :on_edit_account
|
206
|
+
evt_menu ID_ACCOUNT_DELETE, :on_delete_account
|
207
|
+
evt_tool ID_TOOL_NEW_ACCOUNT, :on_new_account
|
208
|
+
evt_tool ID_TOOL_EDIT_ACCOUNT, :on_edit_account
|
209
|
+
evt_tool ID_TOOL_DELETE_ACCOUNT, :on_delete_account
|
210
|
+
update_ui
|
211
|
+
end
|
212
|
+
|
213
|
+
def update_ui
|
214
|
+
evt_update_ui(ID_ACCOUNT_NEW)do |evt|
|
215
|
+
evt.enable(! @account_controller.nil?)
|
216
|
+
end
|
217
|
+
evt_update_ui(ID_TOOL_NEW_ACCOUNT)do |evt|
|
218
|
+
evt.enable(! @account_controller.nil?)
|
219
|
+
end
|
220
|
+
evt_update_ui(ID_ACCOUNT_EDIT)do |evt|
|
221
|
+
evt.enable(!(@account_controller.nil? && @account_list.is_empty))
|
222
|
+
end
|
223
|
+
evt_update_ui(ID_TOOL_EDIT_ACCOUNT)do |evt|
|
224
|
+
evt.enable(!(@account_controller.nil? && @account_list.is_empty))
|
225
|
+
end
|
226
|
+
evt_update_ui(ID_ACCOUNT_DELETE) do |evt|
|
227
|
+
evt.enable(!(@account_controller.nil? && @account_list.is_empty))
|
228
|
+
end
|
229
|
+
evt_update_ui(ID_TOOL_DELETE_ACCOUNT)do |evt|
|
230
|
+
evt.enable(!(@account_controller.nil? && @account_list.is_empty))
|
231
|
+
end
|
232
|
+
evt_update_ui(ID_EDIT_COPY) do |evt|
|
233
|
+
evt.enable(!(@account_controller.nil? && @account_list.is_empty))
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
end
|
238
|
+
end
|
metadata
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dragons_keep
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 5
|
8
|
+
- 0
|
9
|
+
version: 0.5.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Allan Davis
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-08-13 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
segments:
|
26
|
+
- 0
|
27
|
+
version: "0"
|
28
|
+
requirement: *id001
|
29
|
+
prerelease: false
|
30
|
+
type: :runtime
|
31
|
+
name: ezcrypto
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
segments:
|
38
|
+
- 0
|
39
|
+
version: "0"
|
40
|
+
requirement: *id002
|
41
|
+
prerelease: false
|
42
|
+
type: :runtime
|
43
|
+
name: uuid
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
segments:
|
50
|
+
- 0
|
51
|
+
- 10
|
52
|
+
- 2
|
53
|
+
version: 0.10.2
|
54
|
+
requirement: *id003
|
55
|
+
prerelease: false
|
56
|
+
type: :runtime
|
57
|
+
name: dm-core
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
- 10
|
66
|
+
- 2
|
67
|
+
version: 0.10.2
|
68
|
+
requirement: *id004
|
69
|
+
prerelease: false
|
70
|
+
type: :runtime
|
71
|
+
name: do_sqlite3
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
segments:
|
78
|
+
- 2
|
79
|
+
- 0
|
80
|
+
- 1
|
81
|
+
version: 2.0.1
|
82
|
+
requirement: *id005
|
83
|
+
prerelease: false
|
84
|
+
type: :runtime
|
85
|
+
name: wxruby
|
86
|
+
description: Secure Password Keeper Application
|
87
|
+
email: javaalley@gmail.com
|
88
|
+
executables:
|
89
|
+
- dragons_keep
|
90
|
+
extensions: []
|
91
|
+
|
92
|
+
extra_rdoc_files:
|
93
|
+
- README
|
94
|
+
- LICENSE
|
95
|
+
files:
|
96
|
+
- LICENSE
|
97
|
+
- README
|
98
|
+
- Rakefile
|
99
|
+
- Gemfile
|
100
|
+
- bin/dragons_keep
|
101
|
+
- bin/dragons_keep.bat
|
102
|
+
- lib/dragons_keep/account_dialog.rb
|
103
|
+
- lib/dragons_keep/icons/user_delete.png
|
104
|
+
- lib/dragons_keep/icons/lock_edit.xpm
|
105
|
+
- lib/dragons_keep/icons/lock_edit.png
|
106
|
+
- lib/dragons_keep/icons/lock_delete.png
|
107
|
+
- lib/dragons_keep/icons/user_add.png
|
108
|
+
- lib/dragons_keep/icons/lock_add.png
|
109
|
+
- lib/dragons_keep/icons/user_edit.png
|
110
|
+
- lib/dragons_keep/icons/lock_delete.xpm
|
111
|
+
- lib/dragons_keep/icons/lock_add.xpm
|
112
|
+
- lib/dragons_keep/keeps_main.rb
|
113
|
+
- lib/dragons_keep/generate_password_dialog.rb
|
114
|
+
- lib/dragons_keep/account_controller.rb
|
115
|
+
- lib/dragons_keep/account.rb
|
116
|
+
- lib/dragons_keep.rb
|
117
|
+
- db/migrations/201005101750_create_accounts.rb
|
118
|
+
has_rdoc: true
|
119
|
+
homepage: http://github.com/javaalley/dragons_keep
|
120
|
+
licenses: []
|
121
|
+
|
122
|
+
post_install_message:
|
123
|
+
rdoc_options: []
|
124
|
+
|
125
|
+
require_paths:
|
126
|
+
- lib
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
segments:
|
132
|
+
- 0
|
133
|
+
version: "0"
|
134
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
segments:
|
139
|
+
- 0
|
140
|
+
version: "0"
|
141
|
+
requirements: []
|
142
|
+
|
143
|
+
rubyforge_project:
|
144
|
+
rubygems_version: 1.3.6
|
145
|
+
signing_key:
|
146
|
+
specification_version: 3
|
147
|
+
summary: Secure Password Keeper Application
|
148
|
+
test_files: []
|
149
|
+
|