gtk2passwordapp 0.0.8 → 1.0.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.
@@ -1,145 +0,0 @@
1
- # $Date: 2009/02/26 00:26:57 $
2
- require 'lib/passwords_data'
3
- require 'find'
4
-
5
- class Gtk2PasswordMenu
6
- include Configuration
7
-
8
- def get_salt(title='Short Password')
9
- dialog = Gtk::Dialog.new(
10
- title,
11
- nil, nil,
12
- [ Gtk::Stock::QUIT, 0 ],
13
- [ Gtk::Stock::OK, 1 ])
14
-
15
- label = Gtk::Label.new(title)
16
- label.justify = Gtk::JUSTIFY_LEFT
17
- label.wrap = true
18
- label.modify_font(FONT)
19
- dialog.vbox.add(label)
20
- entry = Gtk::Entry.new
21
- entry.visibility = false
22
- entry.modify_font(FONT)
23
- dialog.vbox.add(entry)
24
- dialog.show_all
25
-
26
- entry.signal_connect('activate'){
27
- dialog.response(1)
28
- }
29
-
30
- ret = nil
31
- dialog.run {|response|
32
- ret = entry.text.strip if response == 1
33
- }
34
- dialog.destroy
35
-
36
- return ret
37
- end
38
-
39
- def get_passphrase
40
- passphrase = ''
41
-
42
- pfile = USER_CONF_DIR+'/passphrase.txt'
43
- raise "Need passphrase file" if !File.exist?(pfile)
44
- File.open(pfile,'r'){|fh| passphrase = fh.read }
45
-
46
- return passphrase
47
- end
48
-
49
- def has_datafile?
50
- Find.find(USER_CONF_DIR){|fn|
51
- Find.prune if !(fn==USER_CONF_DIR) && File.directory?(fn)
52
- if fn =~/[0123456789abcdef]{32}\.dat$/ then
53
- return true
54
- end
55
- }
56
- return false
57
- end
58
-
59
- def initialize
60
- @updated = false # only saves data if data updated
61
- @editing = nil # when editor window is up, this is set.
62
- @verified = Time.now.to_i
63
-
64
- @pwd = get_salt || exit
65
- @pph = get_passphrase
66
- @passwords = PasswordsData.new(@pwd+@pph)
67
- # Password file exist?
68
- if @passwords.online? || @passwords.exist? # then
69
- # Yes, load passwords file.
70
- @passwords.load
71
- else
72
- # No, check if there is a file....
73
- if has_datafile? # then
74
- # Yes, it's got a datafile. Ask for password again.
75
- while !@passwords.exist? do
76
- @pwd = get_salt('Try again!') || exit
77
- @passwords = PasswordsData.new(@pwd+@pph)
78
- end
79
- @passwords.load
80
- else
81
- raise "Need passwords data file"
82
- end
83
- end
84
- # Off to the races...
85
- end
86
-
87
- def verify_user
88
- now = Time.now.to_i
89
- if now - @verified > VERIFIED_EXPIRED then
90
- pwd0 = get_salt('Current Password')
91
- return false if !pwd0
92
- tries = 1
93
- while !(pwd0==@pwd) do
94
- tries += 1
95
- pwd0 = get_salt('CURRENT PASSWORD???')
96
- return false if !pwd0 || tries > 2
97
- end
98
- end
99
- @verified = now
100
- return true
101
- end
102
-
103
- def main_quit(icon)
104
- icon.set_visible(false)
105
- icon = nil
106
- Gtk.main_quit
107
- end
108
-
109
- def status_icon
110
- icon = Gtk::StatusIcon.new
111
- icon.set_icon_name(Gtk::Stock::DIALOG_AUTHENTICATION)
112
- icon.tooltip = 'Password Menu'
113
- unlocked = true
114
- icon.signal_connect('activate') {
115
- if unlocked then
116
- unlocked = false
117
- if verify_user then
118
- menu = Gtk::Menu.new
119
- @passwords.accounts.each {|account|
120
- menuitem = Gtk::MenuItem.new(account)
121
- menuitem.child.modify_fg(Gtk::STATE_NORMAL, RED) if @passwords.expired?(account)
122
- menu.append(menuitem)
123
- menuitem.signal_connect('activate'){|b|
124
- primary = Gtk::Clipboard.get(Gdk::Selection::PRIMARY)
125
- clipboard = Gtk::Clipboard.get(Gdk::Selection::CLIPBOARD)
126
- primary.text = clipboard.text = @passwords.password_of(b.child.text.strip)
127
- }
128
- }
129
- menu.append( Gtk::SeparatorMenuItem.new )
130
-
131
- menuitem = Gtk::MenuItem.new('Quit')
132
- menuitem.signal_connect('activate'){ main_quit(icon) }
133
- menu.append(menuitem)
134
-
135
- menu.show_all
136
- menu.popup(nil, nil, 0, 0)
137
- unlocked = true
138
- else
139
- main_quit(icon)
140
- end
141
- end
142
- }
143
- Gtk.main
144
- end
145
- end
data/lib/iocrypt.rb DELETED
@@ -1,40 +0,0 @@
1
- # $Date: 2009/02/26 00:43:37 $
2
- require 'yaml'
3
- require 'rubygems'
4
- require 'crypt/blowfish'
5
-
6
- class IOCrypt
7
- HTTPX = Regexp.new('^https?:\/\/')
8
-
9
- def initialize(passphrase)
10
- @blowfish = Crypt::Blowfish.new(passphrase[0..55])
11
- end
12
-
13
- def load(dumpfile)
14
- data = nil
15
-
16
- if dumpfile =~ HTTPX then
17
- require 'open-uri'
18
- open(dumpfile){|fh|
19
- data = YAML.load( @blowfish.decrypt_string( fh.read ) )
20
- }
21
- else
22
- File.open(dumpfile,'r'){|fh|
23
- data = YAML.load( @blowfish.decrypt_string( fh.read ) )
24
- }
25
- end
26
-
27
- return data
28
- end
29
-
30
- def dump(dumpfile, data)
31
- count = nil
32
- raise "Http PUT not supported" if dumpfile =~ HTTPX
33
-
34
- File.open(dumpfile,'w') do |fh|
35
- count = fh.write( @blowfish.encrypt_string( YAML.dump( data ) ) )
36
- end
37
-
38
- return count
39
- end
40
- end
@@ -1,37 +0,0 @@
1
- # $Date: 2009/02/19 15:49:32 $
2
- module UserSpace
3
- # provided by caller (global_options_variables):
4
- # USER_CONF_DIR
5
- # GEM_LIB_DIR
6
- # CONF_FILE
7
-
8
- def self.mkdir(subdir='')
9
- dir = USER_CONF_DIR+subdir
10
- Dir.mkdir(dir) if !File.exist?(dir)
11
- end
12
-
13
- def self.cp(rfile,wfile)
14
- if !File.exist?(wfile) then
15
- File.open(rfile, 'r'){|fhr|
16
- File.open(wfile, 'w'){|fhw|
17
- fhr.each{|ln| fhw.puts ln}
18
- }
19
- }
20
- File.chmod(0600, wfile) # rw to user only
21
- end
22
- end
23
-
24
- def self.copy(rfile, wfile=nil)
25
- wfile = rfile if !wfile
26
- self.cp(GEM_ROOT_DIR+rfile, USER_CONF_DIR+wfile)
27
- end
28
-
29
- def self.cp_conf
30
- self.cp(GEM_LIB_DIR+CONF_FILE, USER_CONF_DIR+CONF_FILE)
31
- end
32
-
33
- def self.setup
34
- self.mkdir
35
- self.cp_conf
36
- end
37
- end