Class: Gitolite::SSHKey

Inherits:
Object
  • Object
show all
Defined in:
lib/gitolite/ssh_key.rb

Overview

Models an SSH key within gitolite provides support for multikeys

Types of multi keys:

bob.pub => username: bob
[email protected] => username: bob, location: desktop
[email protected] => username: [email protected]
[email protected]@desktop.pub => username: [email protected], location: desktop

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type, blob, email, owner = nil, location = "") ⇒ SSHKey

Returns a new instance of SSHKey.



56
57
58
59
60
61
62
63
# File 'lib/gitolite/ssh_key.rb', line 56

def initialize(type, blob, email, owner = nil, location = "")
  @type = type
  @blob = blob
  @email = email

  @owner = owner || email
  @location = location
end

Instance Attribute Details

#blobObject

Returns the value of attribute blob.



14
15
16
# File 'lib/gitolite/ssh_key.rb', line 14

def blob
  @blob
end

#emailObject

Returns the value of attribute email.



14
15
16
# File 'lib/gitolite/ssh_key.rb', line 14

def email
  @email
end

#locationObject

Returns the value of attribute location.



14
15
16
# File 'lib/gitolite/ssh_key.rb', line 14

def location
  @location
end

#ownerObject

Returns the value of attribute owner.



14
15
16
# File 'lib/gitolite/ssh_key.rb', line 14

def owner
  @owner
end

#typeObject

Returns the value of attribute type.



14
15
16
# File 'lib/gitolite/ssh_key.rb', line 14

def type
  @type
end

Class Method Details

.from_file(key) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/gitolite/ssh_key.rb', line 18

def from_file(key)
  raise "#{key} does not exist!" unless File.exists?(key)

  # Get our owner and location
  File.basename(key) =~ /^([\+\w\.-]+(?:@(?:[\w-]+\.)+\D{2,4})?)(?:@([\w-]+))?.pub$/i
  owner    = $1
  location = $2 || ""

  # Use string key constructor
  self.from_string(File.read(key), owner, location)
end

.from_string(key_string, owner, location = "") ⇒ Object

Construct a SSHKey from a string



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/gitolite/ssh_key.rb', line 32

def from_string(key_string, owner, location = "")
  if owner.nil?
    raise ArgumentError, "owner was nil, you must specify an owner"
  end

  # Get parts of the key
  type, blob, email = key_string.split

  # We need at least a type or blob
  if type.nil? || blob.nil?
    raise ArgumentError, "'#{key_string}' is not a valid SSH key string"
  end

  # If the key didn't have an email, just use the owner
  if email.nil?
    email = owner
  end

  self.new(type, blob, email, owner, location)
end

Instance Method Details

#==(key) ⇒ Object



88
89
90
91
92
93
94
# File 'lib/gitolite/ssh_key.rb', line 88

def ==(key)
  @type == key.type &&
  @blob == key.blob &&
  @email == key.email &&
  @owner == key.owner &&
  @location == key.location
end

#filenameObject



81
82
83
84
85
# File 'lib/gitolite/ssh_key.rb', line 81

def filename
  file = @owner
  file += "@#{@location}" unless @location.empty?
  file += ".pub"
end

#hashObject



97
98
99
# File 'lib/gitolite/ssh_key.rb', line 97

def hash
  [@owner, @location, @type, @blob, @email].hash
end

#to_file(path) ⇒ Object



71
72
73
74
75
76
77
78
# File 'lib/gitolite/ssh_key.rb', line 71

def to_file(path)
  key_file = File.join(path, self.filename)
  File.open(key_file, "w") do |f|
    f.sync = true
    f.write(self.to_s)
  end
  key_file
end

#to_sObject



66
67
68
# File 'lib/gitolite/ssh_key.rb', line 66

def to_s
  [@type, @blob, @email].join(' ')
end