diff options
author | Nat Lasseter <nat.lasseter@york.ac.uk> | 2022-11-21 17:52:09 +0000 |
---|---|---|
committer | Nat Lasseter <nat.lasseter@york.ac.uk> | 2022-11-21 17:52:09 +0000 |
commit | b7bd5fa604c994660fd4718e503484a65973a5c2 (patch) | |
tree | 26609714c424a644884a9fcee3e1206d14a1cce5 /twofa | |
parent | 57ff15f8f46d4a1f885be9e5263273f275b693b7 (diff) |
Add default issuer option
Diffstat (limited to 'twofa')
-rwxr-xr-x | twofa | 36 |
1 files changed, 31 insertions, 5 deletions
@@ -31,6 +31,12 @@ def fatal(msg) end class Secrets + class MultipleDefaultException < StandardError + def initialize + super("Multiple default issuers specified in config file") + end + end + class Secret def initialize(method, secret, tdc, dig, hsh) @method = method @@ -76,25 +82,37 @@ class Secrets def initialize(arr) @secrets = {} + @default = nil + arr.each do |secretline| m, i, s, tc, d, h = secretline.split + + if m[0] == ?* + raise MultipleDefaultException.new unless @default.nil? + m = m[1..-1] + @default = i + end + case m when 'totp' tc = tc&.to_i || 30 when 'hotp' tc = tc&.to_i || 0 end + @secrets[i] = Secret.new(m, s, tc, d&.to_i || 6, h || "sha1") end end + attr_reader :default + def [](issuer) @secrets[issuer] end def puts @secrets.map do |i, s| - "#{s.method} #{i} #{s.puts}" + "#{i == @default ? ?* : ''}#{s.method} #{i} #{s.puts}" end end end @@ -118,12 +136,20 @@ end TWOFAFILE = opts[:twofa_file] fatal("No 2fa issuers file at #{File.absolute_path(TWOFAFILE)}") unless File.exist?(TWOFAFILE) -SECRETS = Secrets.new(File.readlines(TWOFAFILE).map(&:strip)) +begin + SECRETS = Secrets.new(File.readlines(TWOFAFILE).map(&:strip)) +rescue Secrets::MultipleDefaultException => e + fatal(e.message) +end -ISSUER = ARGV.shift&.strip&.downcase -fatal("Specify issuer") if ISSUER.nil? +issuer = ARGV.shift&.strip +if issuer.nil? + issuer = SECRETS.default + fatal("Specify issuer") if issuer.nil? + puts "Using default issuer: #{issuer}" +end -sec = SECRETS[ISSUER] +sec = SECRETS[issuer] fatal("No such issuer") if sec.nil? case sec.method |