brownbeagle-gitauth 0.0.4.1 → 0.0.4.2

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.
data/bin/gitauth CHANGED
@@ -69,7 +69,12 @@ GitAuth::Application.processing(ARGV) do |a|
69
69
  end
70
70
 
71
71
  if options[:admin]
72
-
72
+ key_contents = File.read(options[:admin]).strip
73
+ if GitAuth::User.create("admin", true, key_contents)
74
+ puts "Default admin user added with key '#{options[:admin]}'"
75
+ else
76
+ die! "Error adding default admin user with key at '#{options[:admin]}'"
77
+ end
73
78
  end
74
79
 
75
80
  end
@@ -115,12 +120,17 @@ GitAuth::Application.processing(ARGV) do |a|
115
120
  end
116
121
  end
117
122
 
123
+ a.option(:make_empty, "Initializes the repository to be empty / have an initial blank commit")
118
124
  a.add("add-repo NAME [PATH=NAME]", "Creates a named repository, with an optional path on the file system") do |name, *args|
119
125
  GitAuth.prepare
120
126
  options = args.extract_options!
121
127
  path = (args.shift || name)
122
- if GitAuth::Repo.create(name, path)
128
+ if (repo = GitAuth::Repo.create(name, path))
123
129
  puts "Successfully created repository '#{name}' located at '#{path}'"
130
+ if options[:make_empty]
131
+ puts "Attempting to make empty repository"
132
+ repo.make_empty!
133
+ end
124
134
  else
125
135
  die! "Unable to create repository '#{name}' in location '#{path}'"
126
136
  end
data/lib/gitauth.rb CHANGED
@@ -21,7 +21,7 @@ require 'ostruct'
21
21
 
22
22
  module GitAuth
23
23
 
24
- VERSION = [0, 0, 4, 1]
24
+ VERSION = [0, 0, 4, 2]
25
25
  BASE_DIR = Pathname.new(__FILE__).dirname.join("..").expand_path
26
26
  LIB_DIR = BASE_DIR.join("lib", "gitauth")
27
27
  GITAUTH_DIR = Pathname.new("~/.gitauth/").expand_path
@@ -94,6 +94,13 @@ module GitAuth
94
94
  each_model(:load!)
95
95
  end
96
96
 
97
+ def run(command)
98
+ GitAuth::Logger.info "Running command: #{command}"
99
+ result = system "#{command} 2> /dev/null 1> /dev/null"
100
+ GitAuth::Logger.info "Command was #{"not " if !result}successful"
101
+ return result
102
+ end
103
+
97
104
  end
98
105
 
99
106
  end
@@ -21,18 +21,19 @@
21
21
 
22
22
  module GitAuth
23
23
  class Client
24
+ include GitAuth::Loggable
24
25
 
25
26
  attr_accessor :user, :command
26
27
 
27
28
  def initialize(user_name, command)
28
- GitAuth::Logger.debug "Initializing client with command: #{command.inspect} and user name #{user_name.inspect}"
29
+ logger.debug "Initializing client with command: #{command.inspect} and user name #{user_name.inspect}"
29
30
  @callbacks = Hash.new { |h,k| h[k] = [] }
30
31
  @user = GitAuth::User.get(user_name.to_s.strip)
31
32
  @command = command
32
33
  end
33
34
 
34
35
  def exit_with_error(error)
35
- GitAuth::Logger.warn "Exiting with error: #{error}"
36
+ logger.warn "Exiting with error: #{error}"
36
37
  $stderr.puts error
37
38
  exit! 1
38
39
  end
@@ -59,16 +60,16 @@ module GitAuth
59
60
  exit_with_error "Ze repository you specified does not exist."
60
61
  elsif user.can_execute?(command, repo)
61
62
  git_shell_argument = "#{command.verb} '#{repo.real_path}'"
62
- GitAuth::Logger.info "Running command: #{git_shell_argument} for user: #{@user.name}"
63
+ logger.info "Running command: #{git_shell_argument} for user: #{@user.name}"
63
64
  exec("git-shell", "-c", git_shell_argument)
64
65
  else
65
66
  exit_with_error "These are not the droids you are looking for"
66
67
  end
67
68
  end
68
69
  rescue Exception => e
69
- GitAuth::Logger.fatal "Exception: #{e.class.name}: #{e.message}"
70
+ logger.fatal "Exception: #{e.class.name}: #{e.message}"
70
71
  e.backtrace.each do |l|
71
- GitAuth::Logger.fatal " => #{l}"
72
+ logger.fatal " => #{l}"
72
73
  end
73
74
  exit_with_error "Holy crap, we've imploded cap'n!"
74
75
  end
data/lib/gitauth/group.rb CHANGED
@@ -19,7 +19,8 @@
19
19
 
20
20
  module GitAuth
21
21
  class Group < SaveableClass(:groups)
22
-
22
+ include GitAuth::Loggable
23
+
23
24
  attr_accessor :name, :members
24
25
 
25
26
  def initialize(name)
@@ -73,7 +74,7 @@ module GitAuth
73
74
  end
74
75
 
75
76
  def self.get(name)
76
- GitAuth::Logger.debug "Getting group named #{name.inspect}"
77
+ logger.debug "Getting group named #{name.inspect}"
77
78
  real_name = name.to_s.gsub(/^@/, "")
78
79
  self.all.detect { |g| g.name == real_name }
79
80
  end
data/lib/gitauth/repo.rb CHANGED
@@ -19,10 +19,12 @@
19
19
  require 'fileutils'
20
20
  module GitAuth
21
21
  class Repo < SaveableClass(:repositories)
22
+ include GitAuth::Loggable
23
+
22
24
  NAME_RE = /^([\w\_\-\.\+]+(\.git)?)$/i
23
25
 
24
26
  def self.get(name)
25
- GitAuth::Logger.debug "Getting Repo w/ name: '#{name}'"
27
+ logger.debug "Getting Repo w/ name: '#{name}'"
26
28
  (all || []).detect { |r| r.name == name }
27
29
  end
28
30
 
@@ -97,12 +99,28 @@ module GitAuth
97
99
 
98
100
  def make_empty!
99
101
  tmp_path = "/tmp/gitauth-#{rand(100000)}-#{Time.now.to_i}"
100
- FileUtils.mkdir(tmp_path)
101
- system('git', 'clone', real_path, "#{tmp_path}/current-repo")
102
+ logger.info "Creating temporary dir at #{tmp_path}"
103
+ FileUtils.mkdir_p("#{tmp_path}/current-repo")
104
+ logger.info "Changing to new directory"
102
105
  Dir.chdir("#{tmp_path}/current-repo") do
103
- IO.popen("touch .gitignore && git commit -am 'Initial Empty Repository' && git push origin master") { |f| f.close }
106
+ logger.info "Marking as git repo"
107
+ GitAuth.run "git init"
108
+ logger.info "Touching .gitignore"
109
+ GitAuth.run "touch .gitignore"
110
+ # Configure it
111
+ GitAuth.run "git config push.default current"
112
+ logger.info "Commiting"
113
+ GitAuth.run "git add ."
114
+ GitAuth.run "git commit -am 'Initialize Empty Repository'"
115
+ # Push the changes to the actual repository
116
+ logger.info "Adding origin #{self.real_path}"
117
+ GitAuth.run "git remote add origin '#{self.real_path}'"
118
+ logger.info "Pushing..."
119
+ GitAuth.run "git push origin master"
104
120
  end
105
- FileUtils.rm_rf(tmp_path)
121
+ ensure
122
+ logger.info "Cleaning up old tmp file"
123
+ FileUtils.rm_rf(tmp_path) if File.directory?(tmp_path)
106
124
  end
107
125
 
108
126
  def execute_post_create_hook!
@@ -124,7 +142,9 @@ module GitAuth
124
142
  @permissions[type].uniq!
125
143
  end
126
144
 
127
- def has_permissions_for(whom, type)
145
+ def has_permissions_for(type, whom)
146
+ whom = GitAuth.get_user_or_group(whom) if whom.is_a?(String)
147
+ logger.info "Checking if #{whom.to_s} can #{type} #{self.name}"
128
148
  !(@permissions[type] || []).detect do |reader|
129
149
  reader = GitAuth.get_user_or_group(reader)
130
150
  reader == whom || (reader.is_a?(Group) && reader.member?(whom, true))
data/lib/gitauth/user.rb CHANGED
@@ -19,9 +19,10 @@
19
19
 
20
20
  module GitAuth
21
21
  class User < SaveableClass(:users)
22
-
22
+ include GitAuth::Loggable
23
+
23
24
  def self.get(name)
24
- GitAuth::Logger.debug "Getting user for the name '#{name}'"
25
+ logger.debug "Getting user for the name '#{name}'"
25
26
  (all || []).detect { |r| r.name == name }
26
27
  end
27
28
 
@@ -109,10 +110,10 @@ module GitAuth
109
110
  def can_execute?(command, repo)
110
111
  return if command.bad?
111
112
  if command.write?
112
- GitAuth::Logger.debug "Checking if #{self.name} can push to #{repo.name}"
113
+ logger.debug "Checking if #{self.name} can push to #{repo.name}"
113
114
  pushable?(repo)
114
115
  else
115
- GitAuth::Logger.debug "Checking if #{self.name} can pull from #{repo.name}"
116
+ logger.debug "Checking if #{self.name} can pull from #{repo.name}"
116
117
  pullable?(repo)
117
118
  end
118
119
  end
@@ -24,6 +24,7 @@ GitAuth.require_vendored 'sinatra'
24
24
  require 'digest/sha2'
25
25
  module GitAuth
26
26
  class WebApp < Sinatra::Base
27
+ include GitAuth::Loggable
27
28
 
28
29
  cattr_accessor :current_server
29
30
 
@@ -53,11 +54,11 @@ module GitAuth
53
54
  def self.check_auth
54
55
  if !has_auth?
55
56
  if $stderr.tty?
56
- GitAuth::Logger.logger.verbose = true
57
+ logger.verbose = true
57
58
  puts "For gitauth to continue, you need to provide a username and password."
58
59
  update_auth
59
60
  else
60
- GitAuth::Logger.fatal "You need to provide a username and password for GitAuth to function; Please run 'gitauth webapp` once"
61
+ logger.fatal "You need to provide a username and password for GitAuth to function; Please run 'gitauth webapp` once"
61
62
  exit!
62
63
  end
63
64
  end
@@ -68,20 +69,20 @@ module GitAuth
68
69
  set options
69
70
  handler = detect_rack_handler
70
71
  handler_name = handler.name.gsub(/.*::/, '')
71
- GitAuth::Logger.info "Starting up web server on #{port}"
72
+ logger.info "Starting up web server on #{port}"
72
73
  handler.run self, :Host => host, :Port => port do |server|
73
74
  GitAuth::WebApp.current_server = server
74
75
  set :running, true
75
76
  end
76
77
  rescue Errno::EADDRINUSE => e
77
- GitAuth::Logger.fatal "Server is already running on port #{port}"
78
+ logger.fatal "Server is already running on port #{port}"
78
79
  end
79
80
 
80
81
  def self.stop
81
82
  if current_server.present?
82
83
  current_server.respond_to?(:stop!) ? current_server.stop! : current_server.stop
83
84
  end
84
- GitAuth::Logger.debug "Stopped Server."
85
+ logger.debug "Stopped Server."
85
86
  end
86
87
 
87
88
  use GitAuth::AuthSetupMiddleware
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brownbeagle-gitauth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4.1
4
+ version: 0.0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darcy Laycock
@@ -36,6 +36,46 @@ dependencies:
36
36
  name: Sutto-perennial
37
37
  type: :runtime
38
38
  version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.2.3
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: thoughtbot-shoulda
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 2.0.0
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: redgreen
57
+ type: :development
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 1.0.0
64
+ version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: rr
67
+ type: :development
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 0.10.0
74
+ version:
75
+ - !ruby/object:Gem::Dependency
76
+ name: rack-test
77
+ type: :development
78
+ version_requirement:
39
79
  version_requirements: !ruby/object:Gem::Requirement
40
80
  requirements:
41
81
  - - ">="