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 +7 -0
- data/bin/cqr +54 -0
- data/bin/qrotp +58 -0
- data/lib/cqr/otp/builder.rb +15 -0
- data/lib/cqr/otp.rb +1 -0
- data/lib/cqr/qr_formatter.rb +59 -0
- data/lib/cqr.rb +1 -0
- metadata +79 -0
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
|
+
|
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: []
|