amnesie 0.0.8 → 0.0.9

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 11732d798fc4f5b255df8da77dce5585e801790ce0c0b4b50f6323495b6055b7
4
- data.tar.gz: dd548f98938363b93bdcdc77e3e8772dec636832f39668e64aefbbc430c9414e
3
+ metadata.gz: fee6ddb83b07b28a9196dfddbef713a7f3a6f9a5d32129e7f0952e65c4ed9857
4
+ data.tar.gz: 8e31162f07c03bb4fda8f9774d940adee9df0f9764002176a6c67f0b6687ab88
5
5
  SHA512:
6
- metadata.gz: 109de0795c5ae684624a8f2fd86759fe23fdaa1d360e6616e5d565fe7b59fef76d103a06aaca45803acf2a1d3ff763cf9638c8dc9654dba90b5e05c5c08a8277
7
- data.tar.gz: f7d40849705a4cd1095b5310d69d6cae33152edd502c1270d9d64ba0342a766c362fef499c40688e53913b0cafb5380c243a69452e4c05efd541e16655ffaacd
6
+ metadata.gz: 5db556f79185ecd0098584d9ad2862d97f659461918beb39f625da1b4d804b5af5fe5c7cbd2d5245fe96280deaa5f5abb0dc2c362f73b59c0385c8d66ab4cb2f
7
+ data.tar.gz: 928261af07f2fc37e8f6801dc7b3480ee76854231b08e3ac45d8668fef917d145997788d8ccd87929b81c9eea409a7fdbffe47ec37d7c832f22039dab01d29bb
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,9 @@
1
+ ## 0.0.9, release 2020-11-06
2
+ * Support for iwd
3
+ * Support for wpa_supplicant
4
+ * Config file (per user in ~/.config/amnesie/ or system wide /etc/amnesie/)
5
+ * Can generate a random hostname between 8-25 characters
6
+
1
7
  ## 0.0.8, release 2020-09-22
2
8
  * Enhance code
3
9
  * Update the class MAC, more ruby like
data/README.md CHANGED
@@ -2,10 +2,8 @@
2
2
  A tool to make your computer amnesic.
3
3
 
4
4
  Inspiration come from a post found on [Qubes-OS](https://www.qubes-os.org/doc/anonymizing-your-mac-address/) and the [Whonix](https://www.whonix.org/) project.
5
- + Anonymizing your MAC Address
6
- + Randomize all Ethernet and Wifi connections
5
+ + Anonymizing MAC Address (wifi, ethernet)
7
6
  + Randomize your hostname
8
- + [Boot Clock Randomization](https://www.whonix.org/wiki/Boot_Clock_Randomization)
9
7
 
10
8
  ## Install
11
9
  Amnesie is cryptographically signed, so add my public key (if you haven’t already) as a trusted certificate.
@@ -24,13 +22,17 @@ To be able to use the `persist mode` (with systemd for now), the gem should be i
24
22
  If you can, i recommend that you create a package for your distribution.
25
23
 
26
24
  ## Usage
27
- To change the MAC address for eth0:
25
+ To change the MAC address only on `eth0`:
28
26
 
29
27
  $ amnesie -n eth0 -m
30
28
 
31
29
  Create or Disable all systemd services for a network card:
32
30
 
33
- $ amnesie -p -n wlp2s0
31
+ $ amnesie -p
32
+
33
+ Forge a random hostname with `-H`
34
+
35
+ $ amnesie -H
34
36
 
35
37
  ## Left Over
36
38
 
@@ -36,4 +36,5 @@ Gem::Specification.new do |s|
36
36
  s.add_runtime_dependency('interfacez', '1.0.3')
37
37
  s.add_runtime_dependency('nomansland', '0.0.2')
38
38
  s.add_runtime_dependency('tty-which', '0.4.2')
39
+ s.add_runtime_dependency('highline', '2.0.3')
39
40
  end
@@ -3,25 +3,46 @@ require_relative 'amnesie/persist'
3
3
  require_relative 'amnesie/process'
4
4
  require_relative 'amnesie/network'
5
5
  require_relative 'amnesie/mac'
6
+ require_relative 'amnesie/host'
7
+ require_relative 'amnesie/config'
6
8
  require_relative 'amnesie/helpers'
7
9
 
8
10
  module Amnesie
11
+
12
+ OPTIONS = {
13
+ mac: true,
14
+ hostname: false,
15
+ card_match: /^en/
16
+ }.freeze
17
+
9
18
  def self.random_mac(network)
10
19
  mac = Amnesie::MAC.new(network)
11
20
  mac.set_addr
12
21
  puts "New MAC for " + mac.to_s
13
22
  end
14
23
 
24
+ # For wifi card, no need systemd
25
+ def self.persist_wifi
26
+ if TTY::Which.exist?('iwctl')
27
+ Amnesie::Persist::Iwd.new
28
+ elsif TTY::Which.exist?('wpa_supplicant')
29
+ Amnesie::Persist::WpaSupplicant.new
30
+ end
31
+ end
32
+
15
33
  def self.services(network)
16
- persist = Amnesie::Persist.new(network)
17
- if ! persist.mac_exist?
18
- puts "Create service..."
19
- persist.services
20
- elsif persist.mac_exist?
21
- persist.update_mac
34
+ # For ethernet card
35
+ if TTY::Which.exist?('systemctl') && network.match(/^en/)
36
+ persist = Amnesie::Persist::Systemd.new(network)
37
+ if ! persist.mac_exist?
38
+ puts "Create service..."
39
+ persist.services
40
+ elsif persist.mac_exist?
41
+ puts "service exist"
42
+ persist.update_mac
43
+ end
44
+ persist.menu_mac
22
45
  end
23
- persist.menu_mac
24
- puts persist.to_s
25
46
  end
26
47
 
27
48
  def self.random_mac_and_kill(network)
@@ -47,19 +68,31 @@ module Amnesie
47
68
 
48
69
  def run
49
70
  options = Options.new(@argv)
50
- network = options.net_dev ? Network.new(options.net_dev) : Network.new()
71
+ networks = Network.new(options.card_match, options.net_dev).search
72
+ puts "cards #{networks}"
51
73
 
52
74
  if options.init
53
- Amnesie.random_mac(network.card)
54
- exit
75
+ networks.each { |net|
76
+ Amnesie.random_mac(net)
77
+ }
55
78
  end
56
79
 
57
80
  if options.persist
58
- Amnesie.services(network.card)
81
+ networks.each { |net|
82
+ Amnesie.services(net)
83
+ }
84
+ Amnesie.persist_wifi
85
+ exit
59
86
  end
60
87
 
61
88
  if options.mac
62
- Amnesie.random_mac_and_kill(network.card)
89
+ networks.each { |net|
90
+ Amnesie.random_mac_and_kill(net)
91
+ }
92
+ end
93
+
94
+ if options.hostname
95
+ Amnesie::Host.new
63
96
  end
64
97
  end
65
98
  end
@@ -0,0 +1,34 @@
1
+ require 'yaml'
2
+
3
+ module Amnesie
4
+ class Config
5
+ def initialize
6
+ @file = File.join(find_conf)
7
+ #puts "Config file in #{@file}"
8
+ end
9
+
10
+ def load
11
+ if !File.exist? @file
12
+ puts "[+] Config file created at #{@file}"
13
+ save
14
+ end
15
+ YAML.load_file @file
16
+ end
17
+
18
+ private
19
+
20
+ def find_conf
21
+ if !ENV["HOME"] || ENV["HOME"] == '/root'
22
+ "/etc/conf.d/amnesie.yaml"
23
+ else
24
+ "#{ENV['HOME']}/.config/amnesie/amnesie.yaml"
25
+ end
26
+ end
27
+
28
+ def save
29
+ dir = File.dirname @file
30
+ Nito::Mkdir.new(dir)
31
+ File.open(@file, 'w') { |f| YAML::dump(OPTIONS, f) }
32
+ end
33
+ end
34
+ end
@@ -4,12 +4,12 @@ require 'tempfile'
4
4
  module Helpers
5
5
  class Exec
6
6
  def initialize(name)
7
- @search_uid= Process::Sys.getuid
7
+ @search_uid = Process::Sys.getuid
8
8
  @name = name
9
9
  end
10
10
 
11
11
  def run(args)
12
- if @search_uid == '0' then
12
+ if @search_uid == 0 then
13
13
  #puts "found root - uid #{@search_uid}"
14
14
  system(@name + " " + args)
15
15
  else
@@ -63,8 +63,7 @@ module Helpers
63
63
  elsif Dir.exist? "/usr/lib/systemd/system"
64
64
  "/usr/lib/systemd/system"
65
65
  else
66
- raise "No directory systemd found"
67
- exit
66
+ raise "Systemd is no found..."
68
67
  end
69
68
  end
70
69
  end
@@ -0,0 +1,16 @@
1
+ require 'securerandom'
2
+
3
+ module Amnesie
4
+ class Host
5
+ def initialize
6
+ @nb = rand(8..25)
7
+ @hostname = SecureRandom.alphanumeric(@ng)
8
+ Nito::Hostname.new(@hostname)
9
+ puts to_s
10
+ end
11
+
12
+ def to_s
13
+ "Your hostname will become #{@hostname}"
14
+ end
15
+ end
16
+ end
@@ -2,43 +2,39 @@ require 'interfacez'
2
2
 
3
3
  module Amnesie
4
4
  class Network
5
- attr_accessor :card
6
-
7
- def initialize(name = false)
5
+ def initialize(card_match, name = nil)
6
+ @card_match = card_match
8
7
  @name = name
8
+ @devs = []
9
9
  @check = false
10
10
  end
11
11
 
12
- def card
13
- verify_card
14
- if @check == false then
15
- ask_for_card
12
+ def search
13
+ if @name
14
+ verify_card
15
+ @devs << @name
16
+ else
17
+ search_cards
18
+ @devs
16
19
  end
17
- @name
18
20
  end
19
21
 
20
22
  private
21
23
 
22
24
  def verify_card
23
- return if @check or not @name
24
25
  Interfacez.all do |interface|
25
26
  if interface == @name then
26
27
  @check = true
27
28
  end
28
29
  end
29
- if not @check then
30
- puts "Your interface #{@name} is no found"
30
+ if !@check then
31
+ raise ArgumentError, "Interface no found" if !@check
31
32
  end
32
33
  end
33
34
 
34
- def ask_for_card
35
- until @check == true
36
- Interfacez.all do |interface|
37
- print interface + " "
38
- end
39
- printf "\nWhat is the name of the card to be used? "
40
- @name = gets.chomp
41
- verify_card
35
+ def search_cards
36
+ Interfacez.all do |interface|
37
+ @devs << interface if interface.match(@card_match)
42
38
  end
43
39
  end
44
40
  end
@@ -2,9 +2,13 @@ require 'optparse'
2
2
 
3
3
  module Amnesie
4
4
  class Options
5
- attr_reader :init, :mac, :net_dev, :persist
5
+ attr_reader :init, :mac, :net_dev, :persist, :hostname, :card_match
6
6
 
7
7
  def initialize(argv)
8
+ @default = Config.new.load
9
+ @mac = @default[:mac]
10
+ @hostname = @default[:hostname]
11
+ @card_match = @default[:card_match]
8
12
  parse(argv)
9
13
  end
10
14
 
@@ -13,7 +17,7 @@ module Amnesie
13
17
  def parse(argv)
14
18
  OptionParser.new do |opts|
15
19
 
16
- opts.on("-i", "--init", "Used with init process (systemd, etc...)") do
20
+ opts.on("-i", "--init", "When used with a init process (systemd, etc...)") do
17
21
  @init = true
18
22
  end
19
23
 
@@ -21,7 +25,7 @@ module Amnesie
21
25
  @mac = true
22
26
  end
23
27
 
24
- opts.on("-n", "--net-card NAME", "The name of the card to use") do |net|
28
+ opts.on("-n", "--net-card NAME", "Card to use, default use card_match from the config file.") do |net|
25
29
  @net_dev = net
26
30
  end
27
31
 
@@ -29,13 +33,16 @@ module Amnesie
29
33
  @persist = true
30
34
  end
31
35
 
36
+ opts.on("-H", "--hostname", "Generate a new random hostname") do |host|
37
+ @hostname = true
38
+ end
39
+
32
40
  opts.on("-h", "--help", "Show this message") do
33
41
  puts opts
34
42
  exit
35
43
  end
36
44
 
37
45
  begin
38
- argv = ["-h"] if argv.empty?
39
46
  opts.parse!(argv)
40
47
  rescue OptionParser::ParseError => e
41
48
  STDERR.puts e.message, "\n", opts
@@ -1,92 +1,18 @@
1
- require 'fileutils'
2
- require 'tempfile'
3
- require 'tty-which'
4
-
5
1
  module Amnesie
6
- class Persist
7
- def initialize(card)
8
- @card = card
9
- @systemd_dir = search_systemd_dir
10
- @systemctl = Helpers::Exec.new("systemctl")
11
- end
12
-
13
- def mac_exist?
14
- File.exist? "#{@systemd_dir}/amnesie-mac@.service"
15
- end
16
-
17
- def to_s
18
- @systemd_dir
19
- end
20
-
21
- def mac_service
22
- dhcp=''
23
- if TTY::Which.exist?('dhcpcd')
24
- dhcp='dhcpcd.service'
25
- end
26
- @string=<<EOF
27
- [Unit]
28
- Description=Spoof MAC Address on %I
29
- Wants=network-pre.target
30
- Before=network-pre.target #{dhcp}
31
- BindsTo=sys-subsystem-net-devices-%i.device
32
- After=sys-subsystem-net-devices-%i.device
33
-
34
- [Service]
35
- Type=oneshot
36
- ExecStart=/usr/bin/env bash -lc "amnesie -i -m -n %I"
37
- TimeoutSec=30
38
-
39
- [Install]
40
- WantedBy=multi-user.target
41
- EOF
42
- end
43
-
44
- def services
45
- mac_service
46
- new_service = Helpers::NewSystemd.new(@string, "amnesie-mac@.service")
47
- new_service.add
48
- new_service.perm("root", "644")
49
- end
50
-
51
- def update_mac
52
- print "Found a old amnesie-mac@.service, update? (y|n) "
53
- answer = gets.chomp
54
- case answer
55
- when /^y|^Y/
56
- services
57
- end
58
- end
59
-
60
- def menu_mac
61
- print "Action on amnesie-mac@.service for #{@card} (enable/disable) ? (e/d) "
62
- answer = gets.chomp
63
- case answer
64
- when /^e|^E/
65
- mac_enable
66
- when /^d|^D/
67
- mac_disable
68
- end
69
- end
70
-
71
- private
72
-
73
- def mac_enable
74
- @systemctl.run("enable amnesie-mac@#{@card}.service")
75
- end
76
-
77
- def mac_disable
78
- @systemctl.run("disable amnesie-mac@#{@card}.service")
79
- end
80
-
81
- def search_systemd_dir
82
- if Dir.exist? "/lib/systemd/system"
83
- "/lib/systemd/system"
84
- elsif Dir.exist? "/usr/lib/systemd/system"
85
- "/usr/lib/systemd/system"
86
- else
87
- raise "No directory systemd found"
88
- exit
2
+ module Persist
3
+ def self.grep?(file, regex)
4
+ is_found = false
5
+ return is_found if ! File.exist? file
6
+ File.open(file) do |f|
7
+ f.each do |line|
8
+ is_found = true if line.match(regex)
9
+ end
89
10
  end
11
+ is_found
90
12
  end
91
13
  end
92
14
  end
15
+
16
+ require_relative 'persist/iwd'
17
+ require_relative 'persist/wpa_supplicant'
18
+ require_relative 'persist/systemd'
@@ -0,0 +1,34 @@
1
+ require 'nito'
2
+ require 'tempfile'
3
+
4
+ module Amnesie
5
+ module Persist
6
+ class Iwd
7
+ def initialize
8
+ @tmp = Tempfile.new("main.conf")
9
+ apply
10
+ end
11
+
12
+ def apply
13
+ File.write(@tmp, iwd_conf)
14
+ if ! File.exist? "/etc/iwd/main.conf" ||
15
+ ! grep?("/etc/iwd/main.conf", /AddressRandomization/)
16
+ puts "Add iwd/main.conf"
17
+ Nito::Cp.new(@tmp.path, "/etc/iwd/main.conf")
18
+ else
19
+ puts "MAC random on iwd seem enable."
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def iwd_conf
26
+ <<EOF
27
+ [General]
28
+ AddressRandomization=network
29
+ AddressRandomizationRange=full
30
+ EOF
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,88 @@
1
+ module Amnesie
2
+ module Persist
3
+ class Systemd
4
+ def initialize(card = nil)
5
+ @card = card
6
+ @systemd_dir = search_systemd_dir
7
+ @systemctl = Helpers::Exec.new("systemctl")
8
+ end
9
+
10
+ def mac_exist?
11
+ File.exist? "#{@systemd_dir}/amnesie-mac@.service"
12
+ end
13
+
14
+ def to_s
15
+ @systemd_dir
16
+ end
17
+
18
+ def services
19
+ mac_service
20
+ new_service = Helpers::NewSystemd.new(@string, "amnesie-mac@.service")
21
+ new_service.add
22
+ new_service.perm("root", "644")
23
+ end
24
+
25
+ def update_mac
26
+ print "Found a old amnesie-mac@.service, update? (y|n) "
27
+ answer = gets.chomp
28
+ case answer
29
+ when /^y|^Y/
30
+ services
31
+ end
32
+ end
33
+
34
+ def menu_mac
35
+ print "Action on amnesie-mac@.service for #{@card} (enable/disable) ? (e/d) "
36
+ answer = gets.chomp
37
+ case answer
38
+ when /^e|^E/
39
+ mac_enable
40
+ when /^d|^D/
41
+ mac_disable
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def mac_enable
48
+ @systemctl.run("enable amnesie-mac@#{@card}.service")
49
+ end
50
+
51
+ def mac_disable
52
+ @systemctl.run("disable amnesie-mac@#{@card}.service")
53
+ end
54
+
55
+ def search_systemd_dir
56
+ if Dir.exist? "/lib/systemd/system"
57
+ "/lib/systemd/system"
58
+ elsif Dir.exist? "/usr/lib/systemd/system"
59
+ "/usr/lib/systemd/system"
60
+ else
61
+ raise "No directory systemd found"
62
+ exit
63
+ end
64
+ end
65
+
66
+ def mac_service
67
+ dhcp = TTY::Which.exist?("dhcpcd") ? 'dhcpcd.service' : ''
68
+ @string=<<EOF
69
+ [Unit]
70
+ Description=Spoof MAC Address on %I
71
+ Wants=network-pre.target
72
+ Before=network-pre.target #{dhcp}
73
+ BindsTo=sys-subsystem-net-devices-%i.device
74
+ After=sys-subsystem-net-devices-%i.device
75
+
76
+ [Service]
77
+ Type=oneshot
78
+ ExecStart=/usr/bin/env bash -lc "amnesie -i -n %I"
79
+ ExecReload=/usr/bin/env bash -lc "amnesie -m -n %I"
80
+ TimeoutSec=30
81
+
82
+ [Install]
83
+ WantedBy=multi-user.target
84
+ EOF
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,41 @@
1
+ require 'nito'
2
+ require 'tempfile'
3
+
4
+ module Amnesie
5
+ module Persist
6
+ class WpaSupplicant
7
+ def initialize
8
+ @cards = Network.new(/wl^/, nil).search
9
+ @tmp = Tempfile.new("main.conf")
10
+ apply_cards
11
+ end
12
+
13
+ def apply_cards
14
+ @cards.each { |card|
15
+ apply(card)
16
+ }
17
+ end
18
+
19
+ private
20
+
21
+ def apply(card)
22
+ file = "/etc/wpa_supplicant/wpa_supplicant-#{card}.conf"
23
+ if ! File.exist? file ||
24
+ ! grep?(file, /gas_rand_mac/)
25
+ puts "Add #{file}"
26
+ Nito::Cat.new(file, wpa_conf)
27
+ else
28
+ puts "MAC random on wpa_supplicant seem enable."
29
+ end
30
+ end
31
+
32
+ def wpa_conf
33
+ <<EOF
34
+ mac_addr=1
35
+ preassoc_mac_addr=1
36
+ gas_rand_mac_addr=1
37
+ EOF
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,3 +1,3 @@
1
1
  module Amnesie
2
- VERSION = '0.0.8'.freeze
2
+ VERSION = '0.0.9'.freeze
3
3
  end
@@ -0,0 +1,11 @@
1
+ require_relative 'nito/pass'
2
+ require_relative 'nito/sudo'
3
+ require_relative 'nito/cp'
4
+ require_relative 'nito/cat'
5
+ require_relative 'nito/sed'
6
+ require_relative 'nito/hostname'
7
+ require_relative 'nito/mkdir'
8
+
9
+ module Nito
10
+ ID = `id -u`.chomp.freeze
11
+ end
@@ -0,0 +1,21 @@
1
+ module Nito
2
+ class Cat
3
+ def initialize(conf, string)
4
+ @conf = conf
5
+ @string = string
6
+ write_file
7
+ end
8
+
9
+ private
10
+ def write_file
11
+ tmp = Tempfile.new(@conf)
12
+ if File.exist? @conf
13
+ File.open(@conf).each { |l|
14
+ File.write(tmp, l, mode: 'a')
15
+ }
16
+ end
17
+ File.write(tmp, @string, mode: 'a')
18
+ Nito::Cp.new(tmp.path, @conf)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,35 @@
1
+ require 'fileutils'
2
+
3
+ module Nito
4
+ class Cp
5
+ #@@pass = nil
6
+
7
+ def initialize(src, dst, perm = 0644)
8
+ @src = src
9
+ @dst = dst
10
+ @perm = perm
11
+ if ID == "0"
12
+ root
13
+ else
14
+ #@@pass = Pass.new if ! @@pass
15
+ sudo
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def root
22
+ FileUtils.copy_file(@src, @dst)
23
+ FileUtils.chmod(@perm, @dst)
24
+ end
25
+
26
+ def sudo
27
+ #Sudo.run("cp #{@src} #{@dst}", @@pass.secret)
28
+ Sudo.run("cp #{@src} #{@dst}")
29
+ perm = sprintf "%o", @perm
30
+ #puts "Applying perm #{perm}"
31
+ #Sudo.run("chmod #{perm} #{@dst}", @@pass.secret)
32
+ Sudo.run("chmod #{perm} #{@dst}")
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,24 @@
1
+ require 'tempfile'
2
+
3
+ module Nito
4
+ class Hostname
5
+ def initialize(hostname)
6
+ @hostname = hostname
7
+ @hostname_file = '/etc/hostname'
8
+ @hosts_file = '/etc/hosts'
9
+ new
10
+ end
11
+
12
+ private
13
+
14
+ def new
15
+ tmp = Tempfile.new('hostname')
16
+ File.write(tmp, @hostname)
17
+ Nito::Cp.new(tmp.path, @hostname_file)
18
+ reg_1 = /^127.0.0.1[\s]+localhost/
19
+ reg_2 = /^::1[\s]+localhost/
20
+ Nito::Sed.new(@hosts_file, reg_1, "127.0.0.1 localhost #{@hostname}")
21
+ Nito::Sed.new(@hosts_file, reg_2, "::1 localhost #{@hostname}")
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ require 'fileutils'
2
+
3
+ module Nito
4
+ class Mkdir
5
+ def initialize(dir)
6
+ @dir = dir
7
+ mkdir
8
+ end
9
+
10
+ private
11
+ def mkdir
12
+ begin
13
+ FileUtils.mkdir_p @dir if ! Dir.exist? @dir
14
+ rescue Errno::EACCES
15
+ FileUtils.mkdir_p @dir if ! Dir.exist? @dir
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ require 'highline/import'
2
+
3
+ module Nito
4
+ class Pass
5
+ attr_reader :secret
6
+ def initialize
7
+ get
8
+ end
9
+ private
10
+ def get(prompt = 'Password: ')
11
+ @secret = ask(prompt) { |q| q.echo = false }
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,25 @@
1
+ require 'tempfile'
2
+
3
+ module Nito
4
+ class Sed
5
+ def initialize(file, regex, change)
6
+ @file = file
7
+ @regex = regex
8
+ @change = change
9
+ apply
10
+ end
11
+
12
+ def apply
13
+ raise ArgumentError "No file #{@file} exist" if ! File.exist? @file
14
+ tmp = Tempfile.new('sed')
15
+ File.open(@file).each { |l|
16
+ if l.match(@regex)
17
+ File.write(tmp, "#{@change}\n", mode: 'a')
18
+ else
19
+ File.write(tmp, l, mode: 'a')
20
+ end
21
+ }
22
+ Nito::Cp.new(tmp.path, @file)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,16 @@
1
+ module Nito
2
+ module Sudo
3
+ def self.run(command, input = nil)
4
+ #IO.popen("sudo -S #{command}", 'r+') do |io|
5
+ IO.popen("sudo #{command}", 'r+') do |io|
6
+ begin
7
+ io.puts input
8
+ io.close_write
9
+ io.read
10
+ rescue Interrupt
11
+ puts "\nInterrupt"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amnesie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - szorfein
@@ -35,7 +35,7 @@ cert_chain:
35
35
  J/zT/q2Ac7BWpSLbv6p9lChBiEnD9j24x463LR5QQjDNS5SsjzRQfFuprsa9Nqf2
36
36
  Tw==
37
37
  -----END CERTIFICATE-----
38
- date: 2020-09-22 00:00:00.000000000 Z
38
+ date: 2020-11-06 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: rake
@@ -113,6 +113,20 @@ dependencies:
113
113
  - - '='
114
114
  - !ruby/object:Gem::Version
115
115
  version: 0.4.2
116
+ - !ruby/object:Gem::Dependency
117
+ name: highline
118
+ requirement: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - '='
121
+ - !ruby/object:Gem::Version
122
+ version: 2.0.3
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - '='
128
+ - !ruby/object:Gem::Version
129
+ version: 2.0.3
116
130
  description: ' A tool to make your computer amnesic"
117
131
 
118
132
  '
@@ -133,13 +147,26 @@ files:
133
147
  - amnesie.gemspec
134
148
  - bin/amnesie
135
149
  - lib/amnesie.rb
150
+ - lib/amnesie/config.rb
136
151
  - lib/amnesie/helpers.rb
152
+ - lib/amnesie/host.rb
137
153
  - lib/amnesie/mac.rb
138
154
  - lib/amnesie/network.rb
139
155
  - lib/amnesie/options.rb
140
156
  - lib/amnesie/persist.rb
157
+ - lib/amnesie/persist/iwd.rb
158
+ - lib/amnesie/persist/systemd.rb
159
+ - lib/amnesie/persist/wpa_supplicant.rb
141
160
  - lib/amnesie/process.rb
142
161
  - lib/amnesie/version.rb
162
+ - lib/nito.rb
163
+ - lib/nito/cat.rb
164
+ - lib/nito/cp.rb
165
+ - lib/nito/hostname.rb
166
+ - lib/nito/mkdir.rb
167
+ - lib/nito/pass.rb
168
+ - lib/nito/sed.rb
169
+ - lib/nito/sudo.rb
143
170
  - test/test_mac.rb
144
171
  homepage: https://github.com/szorfein/amnesie
145
172
  licenses:
@@ -163,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
190
  - !ruby/object:Gem::Version
164
191
  version: '0'
165
192
  requirements: []
166
- rubygems_version: 3.1.3
193
+ rubygems_version: 3.0.3
167
194
  signing_key:
168
195
  specification_version: 4
169
196
  summary: A tool to make your computer amnesic
metadata.gz.sig CHANGED
Binary file