gtk2passwordapp 0.0.5 → 0.0.6

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/bin/gtk2passwordapp CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
- # $Date: 2009/02/22 16:23:11 $
2
+ # $Date: 2009/02/22 21:43:54 $
3
3
  ##########################################################
4
4
  require 'lib/global_options_variables'
5
- GlobalOptionsVariables.set('0.0.5',
5
+ GlobalOptionsVariables.set('0.0.6',
6
6
  <<EOT
7
7
  Usage: #{$0.sub(/^.*\//,'')} [options]
8
8
 
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env ruby
2
+ # $Date: 2009/02/22 21:43:54 $
3
+ ##########################################################
4
+ require 'lib/global_options_variables'
5
+ GlobalOptionsVariables.set('0.0.6',
6
+ <<EOT
7
+ Usage: gtk2passwordmenu [options]
8
+
9
+ gtk2passwordmenu will only present the icon's menu.
10
+ For the complete application, use gtk2passwordapp.
11
+
12
+ Options:
13
+ -h, --help print this help text and exit
14
+ -v, --version print program version and exit
15
+ -t, --test test
16
+ -T, --trace trace
17
+ EOT
18
+ )
19
+ require 'lib/setup_user_space'
20
+ UserSpace.setup
21
+ UserSpace.mkdir('/gifs')
22
+ UserSpace.copy('/gifs/logo.gif')
23
+ require USER_CONF_DIR+CONF_FILE
24
+ ##########################################################
25
+ require 'lib/gtk2passwordmenu'
26
+
27
+ lock = USER_CONF_DIR+'/lock'
28
+ if File.exist?(lock) then
29
+ $stderr.puts "process already running?"
30
+ # user should then notice it's already running, but
31
+ # let's remove the lock in case it's not and user
32
+ # tries again....
33
+ File.unlink(lock)
34
+ else
35
+ begin
36
+ File.open(lock,'w'){|fh| fh.puts $$ }
37
+ gpa = Gtk2PasswordMenu.new
38
+ gpa.status_icon
39
+ rescue Exception
40
+ puts_bang!
41
+ ensure
42
+ File.unlink(lock) if File.exist?(lock)
43
+ end
44
+ end
@@ -0,0 +1,151 @@
1
+ # $Date: 2009/02/22 21:40:43 $
2
+ require 'lib/passwords_data'
3
+ require 'gtk2'
4
+ require 'find'
5
+
6
+ class Gtk2PasswordMenu
7
+ include Configuration
8
+
9
+ FONT = Pango::FontDescription.new(FONT_NAME)
10
+ RED = Gdk::Color.parse("#A00000")
11
+ BLACK = Gdk::Color.parse("#000000")
12
+
13
+ def get_salt(title='Short Password')
14
+ dialog = Gtk::Dialog.new(
15
+ title,
16
+ nil, nil,
17
+ [ Gtk::Stock::QUIT, 0 ],
18
+ [ Gtk::Stock::OK, 1 ])
19
+
20
+ label = Gtk::Label.new(title)
21
+ label.justify = Gtk::JUSTIFY_LEFT
22
+ label.wrap = true
23
+ label.modify_font(FONT)
24
+ dialog.vbox.add(label)
25
+ entry = Gtk::Entry.new
26
+ entry.visibility = false
27
+ entry.modify_font(FONT)
28
+ dialog.vbox.add(entry)
29
+ dialog.show_all
30
+
31
+ entry.signal_connect('activate'){
32
+ dialog.response(1)
33
+ }
34
+
35
+ ret = nil
36
+ dialog.run {|response|
37
+ ret = entry.text.strip if response == 1
38
+ }
39
+ dialog.destroy
40
+
41
+ return ret
42
+ end
43
+
44
+ def get_passphrase
45
+ passphrase = ''
46
+
47
+ pfile = USER_CONF_DIR+'/passphrase.txt'
48
+ raise "Need passphrase file" if !File.exist?(pfile)
49
+ File.open(pfile,'r'){|fh| passphrase = fh.read }
50
+
51
+ return passphrase
52
+ end
53
+
54
+ def has_datafile?
55
+ Find.find(USER_CONF_DIR){|fn|
56
+ Find.prune if !(fn==USER_CONF_DIR) && File.directory?(fn)
57
+ if fn =~/[0123456789abcdef]{32}\.dat$/ then
58
+ return true
59
+ end
60
+ }
61
+ return false
62
+ end
63
+
64
+ def initialize
65
+ @updated = false # only saves data if data updated
66
+ @editing = nil # when editor window is up, this is set.
67
+ @verified = Time.now.to_i
68
+
69
+ @pwd = get_salt || exit
70
+ @pph = get_passphrase
71
+ @passwords = PasswordsData.new(@pwd+@pph)
72
+ # Password file exist?
73
+ if @passwords.exist? # then
74
+ # Yes, load passwords file.
75
+ @passwords.load
76
+ else
77
+ # No, check if there is a file....
78
+ if has_datafile? # then
79
+ # Yes, it's got a datafile. Ask for password again.
80
+ while !@passwords.exist? do
81
+ @pwd = get_salt('Try again!') || exit
82
+ @passwords = PasswordsData.new(@pwd+@pph)
83
+ end
84
+ @passwords.load
85
+ else
86
+ raise "Need passwords data file"
87
+ end
88
+ end
89
+ # Off to the races...
90
+ end
91
+
92
+ def verify_user
93
+ now = Time.now.to_i
94
+ if now - @verified > VERIFIED_EXPIRED then
95
+ pwd0 = get_salt('Current Password')
96
+ return false if !pwd0
97
+ tries = 1
98
+ while !(pwd0==@pwd) do
99
+ tries += 1
100
+ pwd0 = get_salt('CURRENT PASSWORD???')
101
+ return false if !pwd0 || tries > 2
102
+ end
103
+ end
104
+ @verified = now
105
+ return true
106
+ end
107
+
108
+ def main_quit(icon)
109
+ icon.set_visible(false)
110
+ icon = nil
111
+ Gtk.main_quit
112
+ end
113
+
114
+ def status_icon
115
+ icon = Gtk::StatusIcon.new
116
+ icon.set_icon_name(Gtk::Stock::DIALOG_AUTHENTICATION)
117
+ icon.tooltip = 'Password Menu'
118
+ unlocked = true
119
+ icon.signal_connect('activate') {
120
+ if unlocked then
121
+ unlocked = false
122
+ if verify_user then
123
+ menu = Gtk::Menu.new
124
+ @passwords.accounts.each {|account|
125
+ menuitem = Gtk::MenuItem.new(account)
126
+ menuitem.child.modify_fg(Gtk::STATE_NORMAL, RED) if @passwords.expired?(account)
127
+ menu.append(menuitem)
128
+ menuitem.signal_connect('activate'){|b|
129
+ primary = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
130
+ clipboard = Gtk::Clipboard.get(Gdk::Selection::CLIPBOARD)
131
+ primary.text = clipboard.text = @passwords.password_of(b.child.text.strip)
132
+ }
133
+ }
134
+ menu.append( Gtk::SeparatorMenuItem.new )
135
+
136
+ menuitem = Gtk::MenuItem.new('Quit')
137
+ menuitem.signal_connect('activate'){ main_quit(icon) }
138
+ menu.append(menuitem)
139
+
140
+ menu.show_all
141
+ menu.popup(nil, nil, 0, 0)
142
+ unlocked = true
143
+ else
144
+ main_quit(icon)
145
+ end
146
+ end
147
+ }
148
+ run if !@passwords.exist?
149
+ Gtk.main
150
+ end
151
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gtk2passwordapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - carlosjhr64@gmail.com
@@ -22,10 +22,11 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: "0"
24
24
  version:
25
- description: A Ruby-Gtk2 application to keep passwords. Uses gem crypt/blofish to encrypt data. Requires crypt and gtk2.
25
+ description: A Ruby-Gtk2 application to keep passwords. Uses gem crypt/blowfish to encrypt data. Requires crypt and gtk2.
26
26
  email: carlosjhr64@gmail.com
27
27
  executables:
28
28
  - gtk2passwordapp
29
+ - gtk2passwordmenu
29
30
  extensions: []
30
31
 
31
32
  extra_rdoc_files: []
@@ -34,6 +35,7 @@ files:
34
35
  - lib/configuration.rb
35
36
  - lib/global_options_variables.rb
36
37
  - lib/gtk2passwordapp.rb
38
+ - lib/gtk2passwordmenu.rb
37
39
  - lib/iocrypt.rb
38
40
  - lib/passwords_data.rb
39
41
  - lib/setup_user_space.rb