cqr 0.0.1

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 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: []