Page Menu
Home
GRNET
Search
Configure Global Search
Log In
Files
F1426822
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Jan 17, 12:25 PM
Size
15 KB
Mime Type
text/x-diff
Expires
Mon, Jan 19, 12:25 PM (1 d, 17 h)
Engine
blob
Format
Raw Data
Handle
326402
Attached To
rARCHIVING archiving
View Options
diff --git a/Gemfile b/Gemfile
index dc18e3a..b0498a7 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,44 +1,45 @@
source 'https://rubygems.org'
group :development, :test do
gem 'pry-byebug'
end
group :development do
gem 'rubocop', '0.35', require: false
gem 'guard-minitest', require: false
gem 'guard', require: false
gem 'capistrano', '3.2.1', require: false # pkg:capistrano
end
# Lock jessie versions
#
gem 'rails', '4.1.8'
gem 'i18n', '0.6.9'
gem 'json', '1.8.1'
gem 'mail', '2.6.1'
gem 'mime-types', '1.25'
gem 'minitest', '5.4.2'
gem 'rack', '1.5.2'
gem 'rack-test', '0.6.2'
gem 'rake', '10.3.2'
gem 'sprockets', '2.12.3'
gem 'sprockets-rails', '2.1.3'
gem 'thread_safe', '0.3.3'
gem 'tzinfo', '1.1.0'
gem 'mysql2', '0.3.16'
gem 'jquery-rails', '3.1.2'
gem 'beaneater', '1.0.0'
+gem 'warden', '1.2.3'
gem 'net-scp', '1.2.1'
gem 'state_machine', '1.2.0'
gem 'kaminari', '0.16.1'
group :test do
gem 'factory_girl_rails', '4.4.1' # pkg:ruby-factory-girl-rails
gem 'rspec-rails', '2.14.2'
gem 'database_cleaner', '1.3.0'
end
diff --git a/Gemfile.lock b/Gemfile.lock
index 15390f2..9767966 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,200 +1,203 @@
GEM
remote: https://rubygems.org/
specs:
actionmailer (4.1.8)
actionpack (= 4.1.8)
actionview (= 4.1.8)
mail (~> 2.5, >= 2.5.4)
actionpack (4.1.8)
actionview (= 4.1.8)
activesupport (= 4.1.8)
rack (~> 1.5.2)
rack-test (~> 0.6.2)
actionview (4.1.8)
activesupport (= 4.1.8)
builder (~> 3.1)
erubis (~> 2.7.0)
activemodel (4.1.8)
activesupport (= 4.1.8)
builder (~> 3.1)
activerecord (4.1.8)
activemodel (= 4.1.8)
activesupport (= 4.1.8)
arel (~> 5.0.0)
activesupport (4.1.8)
i18n (~> 0.6, >= 0.6.9)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.1)
tzinfo (~> 1.1)
arel (5.0.1.20140414130214)
ast (2.1.0)
astrolabe (1.3.1)
parser (~> 2.2)
beaneater (1.0.0)
builder (3.2.2)
byebug (8.0.0)
capistrano (3.2.1)
i18n
rake (>= 10.0.0)
sshkit (~> 1.3)
coderay (1.1.0)
colorize (0.7.7)
database_cleaner (1.3.0)
diff-lcs (1.2.5)
erubis (2.7.0)
factory_girl (4.4.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.4.1)
factory_girl (~> 4.4.0)
railties (>= 3.0.0)
ffi (1.9.10)
formatador (0.2.5)
guard (2.13.0)
formatador (>= 0.2.4)
listen (>= 2.7, <= 4.0)
lumberjack (~> 1.0)
nenv (~> 0.1)
notiffany (~> 0.0)
pry (>= 0.9.12)
shellany (~> 0.0)
thor (>= 0.18.1)
guard-compat (1.2.1)
guard-minitest (2.4.4)
guard-compat (~> 1.2)
minitest (>= 3.0)
hike (1.2.3)
i18n (0.6.9)
jquery-rails (3.1.2)
railties (>= 3.0, < 5.0)
thor (>= 0.14, < 2.0)
json (1.8.1)
kaminari (0.16.1)
actionpack (>= 3.0.0)
activesupport (>= 3.0.0)
listen (3.0.4)
rb-fsevent (>= 0.9.3)
rb-inotify (>= 0.9)
lumberjack (1.0.9)
mail (2.6.1)
mime-types (>= 1.16, < 3)
method_source (0.8.2)
mime-types (1.25)
minitest (5.4.2)
multi_json (1.11.2)
mysql2 (0.3.16)
nenv (0.2.0)
net-scp (1.2.1)
net-ssh (>= 2.6.5)
net-ssh (3.0.1)
notiffany (0.0.8)
nenv (~> 0.1)
shellany (~> 0.0)
parser (2.2.3.0)
ast (>= 1.1, < 3.0)
powerpack (0.1.1)
pry (0.10.3)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
pry-byebug (3.3.0)
byebug (~> 8.0)
pry (~> 0.10)
rack (1.5.2)
rack-test (0.6.2)
rack (>= 1.0)
rails (4.1.8)
actionmailer (= 4.1.8)
actionpack (= 4.1.8)
actionview (= 4.1.8)
activemodel (= 4.1.8)
activerecord (= 4.1.8)
activesupport (= 4.1.8)
bundler (>= 1.3.0, < 2.0)
railties (= 4.1.8)
sprockets-rails (~> 2.0)
railties (4.1.8)
actionpack (= 4.1.8)
activesupport (= 4.1.8)
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rainbow (2.0.0)
rake (10.3.2)
rb-fsevent (0.9.6)
rb-inotify (0.9.5)
ffi (>= 0.5.0)
rspec-core (2.14.8)
rspec-expectations (2.14.5)
diff-lcs (>= 1.1.3, < 2.0)
rspec-mocks (2.14.6)
rspec-rails (2.14.2)
actionpack (>= 3.0)
activemodel (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 2.14.0)
rspec-expectations (~> 2.14.0)
rspec-mocks (~> 2.14.0)
rubocop (0.35.0)
astrolabe (~> 1.3)
parser (>= 2.2.3.0, < 3.0)
powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.7)
ruby-progressbar (1.7.5)
shellany (0.0.1)
slop (3.6.0)
sprockets (2.12.3)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sprockets-rails (2.1.3)
actionpack (>= 3.0)
activesupport (>= 3.0)
sprockets (~> 2.8)
sshkit (1.7.1)
colorize (>= 0.7.0)
net-scp (>= 1.1.2)
net-ssh (>= 2.8.0)
state_machine (1.2.0)
thor (0.19.1)
thread_safe (0.3.3)
tilt (1.4.1)
tzinfo (1.1.0)
thread_safe (~> 0.1)
+ warden (1.2.3)
+ rack (>= 1.0)
PLATFORMS
ruby
DEPENDENCIES
beaneater (= 1.0.0)
capistrano (= 3.2.1)
database_cleaner (= 1.3.0)
factory_girl_rails (= 4.4.1)
guard
guard-minitest
i18n (= 0.6.9)
jquery-rails (= 3.1.2)
json (= 1.8.1)
kaminari (= 0.16.1)
mail (= 2.6.1)
mime-types (= 1.25)
minitest (= 5.4.2)
mysql2 (= 0.3.16)
net-scp (= 1.2.1)
pry-byebug
rack (= 1.5.2)
rack-test (= 0.6.2)
rails (= 4.1.8)
rake (= 10.3.2)
rspec-rails (= 2.14.2)
rubocop (= 0.35)
sprockets (= 2.12.3)
sprockets-rails (= 2.1.3)
state_machine (= 1.2.0)
thread_safe (= 0.3.3)
tzinfo (= 1.1.0)
+ warden (= 1.2.3)
BUNDLED WITH
1.10.6
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 39ebcf6..2adc47c 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,26 +1,62 @@
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
- helper_method :current_user
+ helper_method :current_user, :warden
+
+ def unauthenticated
+ redirect_to root_path
+ end
+
+ # POST /login
+ def login
+ if params[:admin] == 'admin'
+ warden.authenticate(:admin)
+ current_user
+ end
+ redirect_to admin_path
+ end
+
+ def logout
+ warden.logout
+ reset_current_user
+ redirect_to root_path
+ end
protected
+ def warden
+ request.env['warden']
+ end
+
def current_user
- @current_user ||= User.last
+ @current_user ||= warden.user
+ end
+
+ def reset_current_user
+ @current_user = nil
end
def fetch_logs
days_ago = params.fetch(:days_back, 7).to_i rescue 7
if @client
@logs = Log.includes(:job).joins(job: :client).where(Client: { ClientId: @client.id })
else
@logs = Log.includes(:job).joins(job: { client: { host: :users } }).
where(users: { id: current_user.id })
end
@logs = @logs.where('Time > ?', days_ago.days.ago).
order(Time: :desc, LogId: :desc).page(params[:page])
end
+
+ private
+
+ def require_logged_in
+ return if current_user
+
+ flash[:alert] = 'You need to log in first'
+ redirect_to root_path
+ end
end
diff --git a/app/views/shared/_nav.html.erb b/app/views/shared/_nav.html.erb
index bef50e4..776cf87 100644
--- a/app/views/shared/_nav.html.erb
+++ b/app/views/shared/_nav.html.erb
@@ -1,47 +1,51 @@
<!-- Fixed navbar -->
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">Baas</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<%= content_tag(:li, active_class(clients_path, true)) do %>
<%= link_to 'Clients', clients_path %>
<% end %>
<li><a href="/contact">Contact</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Profile <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">Logout</a></li>
<li class="divider"></li>
<li class="dropdown-header">Profile</li>
<li><a href="#">Edit</a></li>
</ul>
</li>
+ <% if current_user %>
+ <li><%= link_to current_user.username, '#' %></li>
+ <% end %>
+ <li><%= link_to 'logout', logout_path %></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<% if current_user.admin? %>
<%= content_tag(:li, active_class(admin_path)) do %>
<%= link_to 'Admin', admin_path %>
<% end %>
<%= content_tag(:li, active_class(admin_clients_path, true)) do %>
<%= link_to 'Clients', admin_clients_path %>
<% end %>
<%= content_tag(:li, active_class(unverified_admin_hosts_path, true)) do %>
<%= link_to 'Hosts', unverified_admin_hosts_path %>
<% end %>
<%= content_tag(:li, active_class(admin_settings_path)) do %>
<%= link_to 'Settings', admin_settings_path %>
<% end %>
<% end %>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
diff --git a/config/initializers/warden.rb b/config/initializers/warden.rb
new file mode 100644
index 0000000..13af20c
--- /dev/null
+++ b/config/initializers/warden.rb
@@ -0,0 +1 @@
+require 'peter/peter'
diff --git a/config/routes.rb b/config/routes.rb
index fd1cd01..38eef99 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,65 +1,67 @@
Rails.application.routes.draw do
- root 'clients#index'
+ root 'application#index'
+ post 'login' => 'application#login'
+ get 'logout' => 'application#logout'
resources :clients, only: [:index, :show] do
member do
get :jobs
get :logs
get :stats
post :stats
end
collection do
post :index
end
end
resources :hosts, only: [:new, :create, :show, :edit, :update, :destroy] do
member do
post :submit_config
get :restore
post :run_restore
delete :revoke
end
resources :jobs, only: [:new, :create, :show, :edit, :update, :destroy] do
member do
patch :toggle_enable
post :backup_now
end
end
resources :filesets, only: [:show, :new, :create, :destroy]
resources :schedules, only: [:show, :new, :edit, :create, :update, :destroy]
end
namespace :admin do
match '/', to: 'base#index', via: [:get, :post]
resources :settings, only: [:index, :new, :create, :edit, :update] do
member do
delete :reset
end
end
resources :clients, only: [:index, :show] do
member do
get :jobs
get :logs
get :stats
post :stats
get :configuration
end
end
resources :hosts, only: [:show] do
collection do
get :unverified
end
member do
post :verify
end
end
end
end
diff --git a/lib/peter/peter.rb b/lib/peter/peter.rb
new file mode 100644
index 0000000..7a5eb58
--- /dev/null
+++ b/lib/peter/peter.rb
@@ -0,0 +1,27 @@
+require 'peter/strategies/admin'
+require 'peter/strategies/vima'
+
+module Peter
+ extend self
+
+ def set_session(user, auth, opts)
+ session = auth.session(:default)
+ end
+
+ Rails.configuration.middleware.insert_after ActionDispatch::Flash, Warden::Manager do |manager|
+ manager.default_strategies :admin, :vima
+ manager.failure_app = ApplicationController
+ end
+
+ Warden::Manager.serialize_into_session do |user|
+ user.id
+ end
+
+ Warden::Manager.serialize_from_session do |id|
+ User.find_by_id(id)
+ end
+end
+
+Warden::Manager.after_authentication do |user,auth,opts|
+ Peter.set_session(user, auth, opts)
+end
diff --git a/lib/peter/strategies/admin.rb b/lib/peter/strategies/admin.rb
new file mode 100644
index 0000000..40c4d7d
--- /dev/null
+++ b/lib/peter/strategies/admin.rb
@@ -0,0 +1,10 @@
+Warden::Strategies.add(:admin) do
+ def valid?
+ params['admin'] == 'admin'
+ end
+
+ def authenticate!
+ u = User.admin.last
+ success!(u)
+ end
+end
diff --git a/lib/peter/strategies/vima.rb b/lib/peter/strategies/vima.rb
new file mode 100644
index 0000000..127c4a8
--- /dev/null
+++ b/lib/peter/strategies/vima.rb
@@ -0,0 +1,7 @@
+Warden::Strategies.add(:vima) do
+ def valid?
+ end
+
+ def authenticate!
+ end
+end
diff --git a/spec/requests/clients_spec.rb b/spec/requests/clients_spec.rb
index e204114..485922e 100644
--- a/spec/requests/clients_spec.rb
+++ b/spec/requests/clients_spec.rb
@@ -1,18 +1,18 @@
require 'spec_helper'
describe ClientsController do
let(:host) { FactoryGirl.create(:host, :with_client) }
let(:user) { FactoryGirl.create(:user) }
before do
- allow_any_instance_of(ClientsController).to receive(:current_user) { user }
+ allow_any_instance_of(ApplicationController).to receive(:current_user) { user }
host.users << user
end
describe '#index' do
it 'fetches the host' do
- get root_path
+ get clients_path
expect(response.body).to match(host.name)
end
end
end
diff --git a/spec/routing/client_routing_spec.rb b/spec/routing/client_routing_spec.rb
index 0e3a5ba..9a8a6ff 100644
--- a/spec/routing/client_routing_spec.rb
+++ b/spec/routing/client_routing_spec.rb
@@ -1,40 +1,36 @@
require 'spec_helper'
describe ClientsController do
it 'routes /clients' do
expect(get('/clients')).to route_to(controller: 'clients', action: 'index')
end
it 'routes /clients' do
expect(post('/clients')).to route_to(controller: 'clients', action: 'index')
end
- it 'routes GET /' do
- expect(get('/')).to route_to(controller: 'clients', action: 'index')
- end
-
it 'routes GET /clients/1' do
expect(get('/clients/1')).to route_to(controller: 'clients', action: 'show', id: '1')
end
it 'routes GET /clients/1/stats' do
expect(get('/clients/1/stats')).
to route_to(controller: 'clients', action: 'stats', id: '1')
end
it 'routes POST /clients/1/stats' do
expect(post('/clients/1/stats')).
to route_to(controller: 'clients', action: 'stats', id: '1')
end
it 'routes GET /clients/1/logs' do
expect(get('/clients/1/logs')).
to route_to(controller: 'clients', action: 'logs', id: '1')
end
it 'routes GET /clients/1/jobs' do
expect(get('/clients/1/jobs')).
to route_to(controller: 'clients', action: 'jobs', id: '1')
end
end
Event Timeline
Log In to Comment