diff options
| author | Randy Morgan <[email protected]> | 2012-05-22 11:15:48 +0900 |
|---|---|---|
| committer | Randy Morgan <[email protected]> | 2012-05-22 11:15:48 +0900 |
| commit | ec39d3f360cf48ac4f29f39025190fa7d88ab600 (patch) | |
| tree | 0b64cd10200115de42880499a6bdaf9f24122fb6 | |
| parent | 64c043b1e2ab3631d3942047d528bd88a59f4ba7 (diff) | |
| download | caxlsx-ec39d3f360cf48ac4f29f39025190fa7d88ab600.tar.gz caxlsx-ec39d3f360cf48ac4f29f39025190fa7d88ab600.zip | |
keep working on a spec compliant method
| -rw-r--r-- | examples/sheet_protection.rb | 2 | ||||
| -rw-r--r-- | lib/axlsx/workbook/worksheet/sheet_protection.rb | 24 |
2 files changed, 24 insertions, 2 deletions
diff --git a/examples/sheet_protection.rb b/examples/sheet_protection.rb index be6cf677..f76f5909 100644 --- a/examples/sheet_protection.rb +++ b/examples/sheet_protection.rb @@ -4,5 +4,5 @@ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib" require 'axlsx' p = Axlsx::Package.new -p.workbook.add_worksheet { |ws| ws.sheet_protection.password = 'fish' } +p.workbook.add_worksheet { |ws| ws.sheet_protection.propper_password = 'fish' } p.serialize 'sheet_protection.xlsx' diff --git a/lib/axlsx/workbook/worksheet/sheet_protection.rb b/lib/axlsx/workbook/worksheet/sheet_protection.rb index 187d2165..87d6186f 100644 --- a/lib/axlsx/workbook/worksheet/sheet_protection.rb +++ b/lib/axlsx/workbook/worksheet/sheet_protection.rb @@ -139,7 +139,10 @@ module Axlsx end end - [:sheet, :objects, :scenarios, :select_locked_cells, :sort, + + # create validating setters for boolean values + # @return [Boolean] + [:sheet, :objects, :scenarios, :select_locked_cells, :sort, :select_unlocked_cells, :format_cells, :format_rows, :format_columns, :insert_columns, :insert_rows, :insert_hyperlinks, :delete_columns, :delete_rows, :auto_filter, :pivot_tables].each do |f_name| @@ -149,11 +152,30 @@ module Axlsx end end + def propper_password=(v) + @algorithm_name = v == nil ? nil : 'SHA-1' + @salt_value = @spin_count = @hash_value = v if v == nil + return if v == nil + require 'digest/sha1' + @spin_count = 10000 + @salt_value = Digest::SHA1.hexdigest(rand(36**8).to_s(36)) + @hash_value = nil + @spin_count.times do |count| + @hash_value = Digest::SHA1.hexdigest((@hash_value || (@salt_value + v.to_s)) + Array(count).pack('V')) + end + end + + + + # encodes password for protection locking def password=(v) return if v == nil @password = create_password_hash(v) end + # Serialize the object + # @param [String] str + # @return [String] def to_xml_string(str = '') str << '<sheetProtection ' str << instance_values.map{ |k,v| k.gsub(/_(.)/){ $1.upcase } << %{="#{v.to_s}"} }.join(' ') |
