cqr 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 093090407d6fc0f47f1e0e39f5bd07cb907452f6
4
+ data.tar.gz: 3abc9d52c8c6790c7fe110fcb7e21d55e6a7b455
5
+ SHA512:
6
+ metadata.gz: 30ed8f07971a90f87f4f7baa865dda51b8197b89f19c018a3940edeb2c67d14a6302a41174510b66231abf9dc54520609e34e1290daa61e2b0aff5d40e62eb26
7
+ data.tar.gz: c9e56a1d545c629dc27decfcc02409c2e4271ff94b48f138b0a7ae85bd1523586f84a1be990f36ec9a027e059069f27f2d6755f524993aaebebd6269c99aeef0
data/bin/cqr ADDED
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'cqr'
4
+ require 'optparse'
5
+ require 'pathname'
6
+
7
+ basename = Pathname.new(__FILE__).basename
8
+
9
+ options = { margin: 4, invert: true }
10
+
11
+ opt_parser = OptionParser.new do |opts|
12
+ opts.banner = "Usage: #{basename} [options] TEXT"
13
+
14
+ opts.on("-s SECRET", "--secret=SECRET", String, "[required] OTP secret") do |secret|
15
+ options[:secret] = secret
16
+ end
17
+
18
+ opts.on("-m MARGIN", "--margin=MARGIN", Integer, "margin size in characters (default 4)") do |margin|
19
+ options[:margin] = margin
20
+ end
21
+
22
+ opts.on("-i", "--no-invert", "don't invert colors (for black on white terminals)") do |invert|
23
+ options[:invert] = invert
24
+ end
25
+
26
+ opts.on("-h", "--help", "display this message") do
27
+ puts opt_parser
28
+ exit
29
+ end
30
+ end
31
+
32
+ opt_parser.parse!
33
+
34
+ if ARGV.size > 1
35
+ puts opt_parser
36
+ exit 1
37
+ end
38
+
39
+ text = ARGV.pop
40
+
41
+ if !text || text.empty?
42
+ puts opt_parser
43
+ exit 1
44
+ end
45
+
46
+ instance = CQR::QRFormatter.new(text)
47
+ instance.margin = options[:margin]
48
+ instance.invert = options[:invert]
49
+
50
+ puts instance.to_s
51
+
52
+
53
+
54
+
data/bin/qrotp ADDED
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'cqr/otp'
4
+ require 'optparse'
5
+ require 'base32'
6
+
7
+ options = { margin: 4, invert: true }
8
+
9
+ opt_parser = OptionParser.new do |opts|
10
+ opts.on("-n NAME", "--name=NAME", String, "[required] display name") do |name|
11
+ options[:name] = name
12
+ end
13
+
14
+ opts.on("-s SECRET", "--secret=SECRET", String, "[required] OTP secret") do |secret|
15
+ options[:secret] = secret
16
+ end
17
+
18
+ opts.on("-m MARGIN", "--margin=MARGIN", Integer, "margin size in characters (default 4)") do |margin|
19
+ p margin
20
+ options[:margin] = margin
21
+ end
22
+
23
+ opts.on("-b", "--[no-]base32", "secret is base32 encoded (default is hexadecimal)") do |base|
24
+ options[:base32] = base
25
+ end
26
+
27
+ opts.on("-i", "--no-invert", "don't invert colors (for black on white terminals)") do |invert|
28
+ options[:invert] = invert
29
+ end
30
+
31
+ opts.on("-h", "--help", "display this message") do
32
+ puts opt_parser
33
+ exit
34
+ end
35
+ end
36
+
37
+ opt_parser.parse!
38
+
39
+ if !options.has_key?(:secret) || !options.has_key?(:name)
40
+ puts opt_parser
41
+ exit -1
42
+ end
43
+
44
+
45
+ if !options[:base32]
46
+ binary = [options[:secret]].pack("H*")
47
+ options[:secret] = Base32.encode(binary)
48
+ end
49
+
50
+
51
+
52
+ instance = CQR::OTP::Builder.new(options[:secret], options[:name]).to_qr
53
+ instance.margin = options[:margin]
54
+ instance.invert = options[:invert]
55
+
56
+ puts instance.to_s
57
+
58
+
@@ -0,0 +1,15 @@
1
+ require 'cqr'
2
+
3
+ module CQR
4
+ module OTP
5
+ class Builder
6
+ def initialize(secret, name)
7
+ @url = "otpauth://totp/#{name}?secret=#{secret}"
8
+ end
9
+
10
+ def to_qr
11
+ QRFormatter.new(@url, 5)
12
+ end
13
+ end
14
+ end
15
+ end
data/lib/cqr/otp.rb ADDED
@@ -0,0 +1 @@
1
+ require 'cqr/otp/builder.rb'
@@ -0,0 +1,59 @@
1
+ require 'rqrcode'
2
+
3
+ module CQR
4
+ class QRFormatter
5
+ attr_accessor :invert, :margin
6
+ alias_method :invert?, :invert
7
+
8
+ def initialize(string, margin = 0, invert = true)
9
+ self.margin = margin
10
+ self.invert = invert
11
+ create_qr_code(string)
12
+ end
13
+
14
+ def to_s
15
+ lines = []
16
+
17
+ lines << horizontal_margin
18
+
19
+ qrstring.lines.map do |line|
20
+ lines << "#{prefix}#{vertical_margin}#{line.chomp}#{vertical_margin}"
21
+ end
22
+
23
+ lines << horizontal_margin
24
+
25
+ lines.join "\n"
26
+ end
27
+
28
+ private
29
+
30
+ def qrstring
31
+ @qrstring ||= @qrcode.to_s(true: "\u2588", false: " ")
32
+ end
33
+
34
+ def vertical_margin
35
+ " " * margin
36
+ end
37
+
38
+ def horizontal_margin
39
+ width = qrstring.lines.first.chomp.size
40
+ lines = margin.times.map{ "#{prefix}#{" "*(width+2*margin)}" }
41
+ lines.join "\n"
42
+ end
43
+
44
+ def create_qr_code(string)
45
+ size = 1
46
+ begin
47
+ @qrcode = RQRCode::QRCode.new(string, size: size)
48
+ rescue RQRCode::QRCodeRunTimeError
49
+ size += 1
50
+ retry
51
+ end
52
+ end
53
+
54
+ def prefix
55
+ prefix = (invert? ? "\e[7m" : "")
56
+ end
57
+
58
+ end
59
+ end
data/lib/cqr.rb ADDED
@@ -0,0 +1 @@
1
+ require 'cqr/qr_formatter'
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cqr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Arkadiusz Hiler
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-11-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rqrcode
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.4.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.4.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: base32
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.0
41
+ description: CQR is comman-line tool for creating and displaying QR Codes.
42
+ email:
43
+ - arkadiusz@hiler.pl
44
+ executables:
45
+ - cqr
46
+ - qrotp
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - lib/cqr/otp/builder.rb
51
+ - lib/cqr/qr_formatter.rb
52
+ - lib/cqr/otp.rb
53
+ - lib/cqr.rb
54
+ - bin/cqr
55
+ - bin/qrotp
56
+ homepage: https://github.com/ivyl/cqr
57
+ licenses: []
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - '>='
71
+ - !ruby/object:Gem::Version
72
+ version: 1.3.6
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 2.0.3
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: Command-line QR Code tool.
79
+ test_files: []