ppp 0.1.3.alpha → 0.1.4.alpha

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.
@@ -12,7 +12,6 @@ void Init_Cppp()
12
12
  {
13
13
  cPpp = rb_define_class( "Cppp", rb_cObject );
14
14
  rb_define_module_function( cPpp, "random_key", t_random_key, 0 );
15
- rb_define_module_function( cPpp, "key_from_string", t_key_from_string, 1 );
16
15
  rb_define_module_function( cPpp, "passcodes", t_get_passcodes, 5 );
17
16
  }
18
17
 
@@ -38,14 +37,6 @@ static VALUE t_random_key( VALUE self )
38
37
  return key_to_string( &key );
39
38
  }
40
39
 
41
- static VALUE t_key_from_string( VALUE self, VALUE str )
42
- {
43
- SequenceKey key;
44
-
45
- GenerateSequenceKeyFromString( StringValueCStr( str ), &key );
46
- return key_to_string( &key );
47
- }
48
-
49
40
  static VALUE t_get_passcodes( VALUE self, VALUE v_key, VALUE v_offset, VALUE v_count, VALUE v_length, VALUE v_alphabet )
50
41
  {
51
42
  SequenceKey key;
data/lib/ppp.rb CHANGED
@@ -4,6 +4,7 @@ require "ppp/generator"
4
4
  require 'ppp/Cppp'
5
5
  require 'ppp/card/base'
6
6
  require 'ppp/card/html'
7
+ require 'ppp/card/xml'
7
8
  require 'ppp/card/plain'
8
9
 
9
10
  module Ppp
@@ -29,6 +30,7 @@ module Ppp
29
30
  def printer style, *args
30
31
  case style
31
32
  when :html then return Card::Html.new *args
33
+ when :xml then return Card::Xml.new *args
32
34
  when :plain then return Card::Plain.new *args
33
35
  end
34
36
  raise ArgumentError.new( "%s is not a valid printer style." % style )
@@ -3,6 +3,8 @@ require 'ppp/generator'
3
3
  module Ppp
4
4
  module Card
5
5
  class Base
6
+ attr_reader :card_number, :row_count, :title
7
+
6
8
  @@CHARS_PER_LINE = 34
7
9
  @@FIRST_COLUMN = ?A
8
10
  @@ROW_COL_PATTERN = /[[:digit:]][[:alpha:]]/
@@ -14,24 +16,39 @@ module Ppp
14
16
  @generator = generator
15
17
  raise ArgumentError.new( @@ERROR_LONG_CODES ) if code_length > 16
16
18
 
17
- options = { :card_title => 'PPP Passcard', :first_card_index => 1 }.merge opts
18
- @title = options[ :card_title ]
19
- @card_index = options[ :first_card_index ]
20
- @offset = 0
19
+ options = { :row_count => 10,
20
+ :card_title => 'PPP Passcard',
21
+ :first_card_number => 1 }
22
+ options.merge! opts
23
+ @title = options[ :card_title ]
24
+ @row_count = options[ :row_count ]
25
+ @card_number = options[ :first_card_number ]
21
26
  end
22
27
 
23
28
  def code_length
24
29
  @generator.length
25
30
  end
26
31
 
32
+ def card_number= number
33
+ raise ArgumentError.new( "card number must be a positive integer" ) if number < 1
34
+ @card_number = number
35
+ end
36
+
27
37
  def passcodes_per_line
28
38
  @passcodes_per_line ||= ( (@@CHARS_PER_LINE+1) / (code_length + 1) ).to_i
29
39
  end
30
40
 
31
- def next_code
32
- code = @generator.passcode( @offset )
33
- @offset += 1
34
- code
41
+ def passcodes_per_card
42
+ passcodes_per_line * row_count
43
+ end
44
+
45
+ def codes
46
+ (1..row_count).collect do |row|
47
+ card_offset = (card_number-1) * passcodes_per_card
48
+ offset = card_offset + ((row-1) * passcodes_per_line)
49
+ puts "offset: #{offset}"
50
+ @generator.passcodes( offset, passcodes_per_line )
51
+ end
35
52
  end
36
53
 
37
54
  def passcode row_col
@@ -45,6 +62,10 @@ module Ppp
45
62
 
46
63
  @generator.passcode row_offset * passcodes_per_line + col_offset
47
64
  end
65
+
66
+ def column_label column_number
67
+ (@@FIRST_COLUMN.ord + (column_number - 1)).chr
68
+ end
48
69
  end
49
70
  end
50
71
  end
@@ -15,7 +15,7 @@ class Ppp::Card::Html < Ppp::Card::Base
15
15
  def css
16
16
  %[
17
17
  <style>
18
- .card, .card .title, .card .card_index, .card .codes, .card .codes td {
18
+ .card, .card .title, .card .card_number, .card .codes, .card .codes td {
19
19
  font-family: monospace;
20
20
  font-size: 3.5mm;
21
21
  }
@@ -39,12 +39,12 @@ class Ppp::Card::Html < Ppp::Card::Base
39
39
  .title td:first-child {
40
40
  width: 2.5em;
41
41
  }
42
- .card_index {
42
+ .card_number {
43
43
  float: right;
44
44
  margin-right: 1ex;
45
45
  }
46
- .card_index:before { content: '['; }
47
- .card_index:after { content: ']'; }
46
+ .card_number:before { content: '['; }
47
+ .card_number:after { content: ']'; }
48
48
 
49
49
  .codes_heading th {
50
50
  text-align: center;
@@ -79,20 +79,25 @@ class Ppp::Card::Html < Ppp::Card::Base
79
79
  end
80
80
 
81
81
  def html
82
+ rows = codes.each_with_index.collect do |row, i|
83
+ cols = row.collect { |code| " <td>#{code}</td>" }.join(?\n)
84
+ "<tr>\n <td>#{i+1}:</td>\n#{cols}</tr>"
85
+ end.join(?\n)
86
+
82
87
  %[
83
88
  <table class="card">
84
89
  <caption class="title">
85
90
  #{@title}
86
- <span class="card_index">#{@card_index}</span>
91
+ <span class="card_number">#{card_number}</span>
87
92
  </caption>
88
93
  <colgroup span="1">
89
94
  <colgroup span="#{passcodes_per_line}">
90
95
  <thead class="codes_heading">
91
96
  <th>&nbsp;</th>
92
- #{ (0..passcodes_per_line-1).collect { |i| %[<th>#{(@@FIRST_COLUMN.ord + i).chr}</th>] }.join ?\n }
97
+ #{ passcodes_per_line.times.collect { |i| %[<th>#{column_label(i+1)}</th>] }.join ?\n }
93
98
  </thead>
94
99
  <tbody class="codes">
95
- #{ (1..9).collect { |i| "<tr><td>#{i}</td>#{(1..passcodes_per_line).collect {%[<td>#{next_code}</td>]}.join(?\n) }</tr>" }.join(?\n) }
100
+ #{rows}
96
101
  </tbody>
97
102
  </table>
98
103
  ]
@@ -4,9 +4,6 @@ class Ppp::Card::Plain < Ppp::Card::Base
4
4
 
5
5
  def initialize generator, opts={}
6
6
  super
7
-
8
- options = { :row_count => 10 }.merge opts
9
- @row_count = options[ :row_count ]
10
7
  end
11
8
 
12
9
  def to_s
@@ -18,59 +15,53 @@ class Ppp::Card::Plain < Ppp::Card::Base
18
15
  line( split_bar )
19
16
  end
20
17
 
18
+ def card_number= number
19
+ super
20
+ end
21
+
21
22
  private
22
23
 
23
24
  def bar
24
- @bar ||= '-' * (width + 2)
25
+ '-' * (width + 2)
25
26
  end
26
27
 
27
28
  def width
28
- @width ||= begin
29
- return rows.first.join( ' ' ).size if rows.size >= 1
30
- header.size
31
- end
29
+ return rows.first.join( ' ' ).size if rows.size >= 1
30
+ header.size
32
31
  end
33
32
 
34
33
  def rows
35
- @rows ||= begin
36
- (1..@row_count).collect do |i|
37
- [ first_column( i ) ] + (1..passcodes_per_line).collect {next_code}
38
- end
39
- end
34
+ codes.each_with_index.collect { |row, i| [ first_column( i ) ] + row }
40
35
  end
41
36
 
42
37
  def header
43
- @header ||= header_cells.join ' '
38
+ header_cells.join ' '
44
39
  end
45
40
 
46
41
  def header_cells
47
- [' ' * first_column_width ] + (1..passcodes_per_line).collect do |i|
48
- (@@FIRST_COLUMN.ord + i-1).chr.center code_length
49
- end
42
+ cells = passcodes_per_line.times.collect { |i| column_label(i+1).center code_length }
43
+
44
+ [' ' * first_column_width ] + cells
50
45
  end
51
46
 
52
47
  def title_str
53
- @title_str ||= begin
54
- title = @title[0, width - card_label.size] # trim title if it's too long to fit
48
+ title = @title[0, width - card_label.size] # trim title if it's too long to fit
55
49
 
56
- blank_space = width - (title.size + card_label.size)
57
- title = title + (' ' * blank_space) + card_label
58
- end
50
+ blank_space = width - (title.size + card_label.size)
51
+ title = title + (' ' * blank_space) + card_label
59
52
  end
60
53
 
61
54
  def card_label
62
- @card_label ||= "[#{@card_index}]"
55
+ "[#{card_number}]"
63
56
  end
64
57
 
65
58
  def split_bar
66
- @split_bar ||= begin
67
- parts = ['-' * first_column_width] + (1..passcodes_per_line).collect { '-' * code_length }
68
- "-#{parts.join '+'}-"
69
- end
59
+ parts = ['-' * first_column_width] + (1..passcodes_per_line).collect { '-' * code_length }
60
+ "-#{parts.join '+'}-"
70
61
  end
71
62
 
72
63
  def row_lines
73
- @row_lines ||= rows.collect{ |r| line :pad, r.join( ' ' ) }
64
+ rows.collect{ |r| line :pad, r.join( ' ' ) }
74
65
  end
75
66
 
76
67
  def line pad=:nopad, str
@@ -86,6 +77,6 @@ class Ppp::Card::Plain < Ppp::Card::Base
86
77
  end
87
78
 
88
79
  def first_column_width
89
- @first_column_width ||= @row_count.to_s.size + 1
80
+ @row_count.to_s.size + 1
90
81
  end
91
82
  end
@@ -0,0 +1,20 @@
1
+ require 'ppp/generator'
2
+ require 'ppp/card/base'
3
+
4
+ class Ppp::Card::Xml < Ppp::Card::Base
5
+ def initialize generator, opts={}
6
+ super
7
+ end
8
+
9
+ def to_s
10
+ rows = codes.each_with_index.collect do |row, i|
11
+ cols = row.each_with_index.collect { |code, j| " <column label=\"#{column_label(j+1)}\">#{code}</column>" }.join(?\n)
12
+ " <row number=\"#{i+1}\">\n#{cols}\n </row>\n"
13
+ end.join(?\n)
14
+
15
+ %[<?xml version="1.0" encoding="UTF-8" ?>\n] +
16
+ %[<card title="#{@title}" number="#{card_number}">\n] +
17
+ rows +
18
+ %[</card>\n]
19
+ end
20
+ end
@@ -1,3 +1,3 @@
1
1
  module Ppp
2
- VERSION = '0.1.3.alpha'
2
+ VERSION = '0.1.4.alpha'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ppp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3.alpha
4
+ version: 0.1.4.alpha
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-20 00:00:00.000000000 Z
12
+ date: 2012-02-21 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Ruby-PPP is a Ruby language binding of PPP (Perfect Paper Passwords).
15
15
  PPP is a library designed to create one-time passwords, described at http://grc.com/ppp.htm
@@ -26,6 +26,7 @@ files:
26
26
  - lib/ppp/version.rb
27
27
  - lib/ppp/card/base.rb
28
28
  - lib/ppp/card/plain.rb
29
+ - lib/ppp/card/xml.rb
29
30
  - lib/ppp/card/html.rb
30
31
  - ext/ppp/ppp.c
31
32
  - ext/ppp/cppp.c