Sha256: fd1acabb9cd755b11bb734e613e55b8a5339683a38093ce294c7329a5fdf2aff

Contents?: true

Size: 1.15 KB

Versions: 8

Compression:

Stored size: 1.15 KB

Contents

class PublicKey < ActiveRecord::Base
  belongs_to :user
  attr_accessible :raw_content
  attr_writer :raw_content

  validate :check_raw_content
  validates :content, uniqueness: true

  before_validation :save_raw_content

  EXTRACT_CONTENT = /^(ssh-(?:dss|rsa)\s.*?)(?:\s+(.*)\s*)?$/

  def raw_content
    return @raw_content if @raw_content.present?
    "#{content} #{comment}" if content.present? && comment.present?
  end

  def split_raw_content
    @raw_content.scan(EXTRACT_CONTENT).flatten.map(&:to_s).map(&:chomp)
  end

  def save_raw_content
    self.content, self.comment = split_raw_content if @raw_content.present?
  end

  def check_raw_content
    if !@raw_content.present? && !content.present?
      errors.add :raw_content, :blank
    elsif @raw_content.present? && split_raw_content.first.blank?
      errors.add :raw_content, "cannot be parsed"
    end
  end

  def self.authorized_key_map
    key_map = {}
    all.each do |key|
      key_map[key.user.username] ||= []
      key_map[key.user.username] += [key.raw_content]
    end
    key_map
  end

  def self.regenerate_authorized_keys
    GitWit.regenerate_authorized_keys(authorized_key_map)
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
git_wit-0.0.6 test/dummy/app/models/public_key.rb
git_wit-0.0.6.pre test/dummy/app/models/public_key.rb
git_wit-0.0.5 test/dummy/app/models/public_key.rb
git_wit-0.0.4.pre2 test/dummy/app/models/public_key.rb
git_wit-0.0.4.pre test/dummy/app/models/public_key.rb
git_wit-0.0.3 test/dummy/app/models/public_key.rb
git_wit-0.0.2 test/dummy/app/models/public_key.rb
git_wit-0.0.1 test/dummy/app/models/public_key.rb