Page Menu
Home
GRNET
Search
Configure Global Search
Log In
Files
F887836
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
Sun, Aug 10, 5:44 AM
Size
8 KB
Mime Type
text/x-diff
Expires
Tue, Aug 12, 5:44 AM (12 h, 36 m)
Engine
blob
Format
Raw Data
Handle
246417
Attached To
rARCHIVING archiving
View Options
diff --git a/app/controllers/clients_controller.rb b/app/controllers/clients_controller.rb
index 3d703b0..de975eb 100644
--- a/app/controllers/clients_controller.rb
+++ b/app/controllers/clients_controller.rb
@@ -1,137 +1,154 @@
class ClientsController < ApplicationController
before_action :require_logged_in
before_action :fetch_client, only: [:show, :jobs, :logs, :stats, :users, :restore, :run_restore,
- :restore_selected]
+ :restore_selected, :remove_user]
before_action :fetch_logs, only: [:logs]
# GET /clients
# POST /clients
def index
@client_ids = Client.for_user(current_user.id).pluck(:ClientId)
@clients = Client.where(ClientId: @client_ids).includes(:jobs)
@hosts = current_user.hosts.not_baculized
fetch_jobs_info
get_charts
end
# GET /clients/1
def show
@schedules = @client.host.job_templates.map(&:schedule)
@filesets = @client.host.job_templates.map(&:fileset)
end
# GET /clients/1/jobs
def jobs
@jobs = @client.recent_jobs.page(params[:page])
end
# GET /clients/1/logs
def logs; end
# GET /clients/1/stats
# POST /clients/1/stats
def stats
get_charts
end
# GET /clients/1/users
def users
@users = @client.host.users
end
+ # DELETE /clients/1/user
+ def remove_user
+ user = @client.host.users.find(params[:user_id])
+ if @client.host.users.delete(user)
+ flash[:success] =
+ if @client.manually_inserted?
+ 'User successfully removed'
+ else
+ 'User must be removed from the VM\'s list form your VM provider too (ViMa or Okeanos).'
+ end
+ else
+ flash[:alert] = 'User not removed, something went wrong'
+ end
+
+ redirect_to users_client_path(@client)
+ end
+
# GET /clients/1/restore
def restore
return if @client.is_backed_up?
flash[:error] = 'Can not issue a restore for this client'
redirect_to client_path(@client)
end
# POST /clients/1/run_restore
def run_restore
@location = params[:restore_location].blank? ? '/tmp/bacula_restore' : params[:restore_location]
fileset = params[:fileset]
restore_point = fetch_restore_point
if params[:commit] == 'Restore All Files'
if @location.nil? || fileset.nil? || !@client.host.restore(fileset, @location, restore_point)
flash[:error] = 'Something went wrong, try again later'
else
flash[:success] =
"Restore job issued successfully, files will be soon available in #{@location}"
end
render js: "window.location = '#{client_path(@client)}'"
else
session[:job_ids] = @client.get_job_ids(fileset, restore_point)
Bvfs.new(@client, session[:job_ids]).update_cache
render 'select_files'
end
end
# POST /clients/1/restore_selected
def restore_selected
Bvfs.new(@client, session[:job_ids]).restore_selected_files(params[:files], params[:location])
session.delete(:job_ids)
flash[:success] =
"Restore job issued successfully, files will be soon available in #{params[:location]}"
redirect_to client_path(@client)
end
# GET /clients/1/tree?id=1
def tree
@client = Client.for_user(current_user.id).find(params[:client_id])
bvfs = Bvfs.new(@client, session[:job_ids])
pathid = params[:id].to_i
if pathid.nonzero?
bvfs.fetch_dirs(pathid)
else
bvfs.fetch_dirs
end
tree = bvfs.extract_dir_id_and_name.map do |id, name|
{ id: id, text: name, state: { checkbox_disabled: true }, children: true }
end
if pathid.nonzero?
bvfs.fetch_files(pathid)
bvfs.extract_file_id_and_name.each do |id, name|
tree << { id: id, text: name, type: 'file' }
end
end
render json: tree
end
private
def fetch_client
@client = Client.for_user(current_user.id).find(params[:id])
@client_ids = [@client.id]
end
def fetch_jobs_info
@stats = JobStats.new(@client_ids)
end
def get_charts
days_ago = params.fetch(:days_back, 7).to_i rescue 7
@job_status = ChartGenerator.job_statuses(@client_ids, days_ago)
@job_stats = ChartGenerator.job_stats(@client_ids, days_ago - 1)
end
def fetch_restore_point
if params['restore_time(4i)'].blank? || params['restore_time(5i)'].blank? ||
params[:restore_date].blank?
return nil
end
restore_point =
"#{params[:restore_date]} #{params['restore_time(4i)']}:#{params['restore_time(5i)']}:00"
begin
DateTime.strptime(restore_point, '%Y-%m-%d %H:%M:%S')
rescue
return nil
end
restore_point
end
end
diff --git a/app/views/clients/_user.html.erb b/app/views/clients/_user.html.erb
index 9f0bf44..4b94a6a 100644
--- a/app/views/clients/_user.html.erb
+++ b/app/views/clients/_user.html.erb
@@ -1,4 +1,16 @@
<tr>
<td><%= user.username %></td>
<td><%= user.email %></td>
+ <td>
+ <% if @client.manually_inserted? %>
+ <%= link_to remove_user_client_path(@client, user_id: user.id), method: :delete,
+ class: 'btn btn-default',
+ data: { confirm: "User #{user.username} will be removed" } do %>
+ <label class="glyphicon glyphicon-ban-circle text-danger"></label>
+ Remove
+ <% end %>
+ <% else %>
+ -
+ <% end %>
+ </td>
</tr>
diff --git a/app/views/clients/_users.html.erb b/app/views/clients/_users.html.erb
index 35b090a..6e80fac 100644
--- a/app/views/clients/_users.html.erb
+++ b/app/views/clients/_users.html.erb
@@ -1,15 +1,16 @@
<div class="col-xs-12">
<div class="table-responsive">
<table class="table table-striped table-bordered table-condensed">
<thead>
<tr>
<th>Username</th>
<th>Email</th>
+ <th>Actions</th>
</tr>
</thead>
<tbody>
<%= render partial: 'user', collection: @users %>
</tbody>
</table>
</div>
</div>
diff --git a/config/routes.rb b/config/routes.rb
index d652ea1..3b64306 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,93 +1,94 @@
Rails.application.routes.draw do
root 'application#index'
post 'grnet' => 'application#grnet'
get 'institutional' => 'application#institutional'
match 'vima', to: 'application#vima', :via => [:get, :post]
get 'logout' => 'application#logout'
resources :clients, only: [:index, :show] do
member do
get :jobs
get :logs
get :stats
post :stats
get :users
get :restore
post :run_restore
post :restore_selected
+ delete :remove_user
end
collection do
post :index
end
end
resources :clients, only: [], param: :client_id do
member do
get :tree
end
end
resources :hosts, only: [:new, :create, :show, :edit, :update, :destroy] do
member do
post :submit_config
post :disable
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, :edit, :update, :destroy]
resources :schedules, only: [:show, :new, :edit, :create, :update, :destroy]
end
namespace :admin do
match '/', to: 'base#index', via: [:get, :post]
get '/login' => 'base#login', as: :login
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
post :disable
post :block
post :unblock
delete :revoke
end
end
resources :hosts, only: [:show] do
collection do
get :unverified
end
member do
post :verify
end
end
resources :users, only: [:index, :new, :create, :show, :edit, :update] do
member do
patch :ban
patch :unban
end
end
resources :pools, only: [:index, :new, :create, :show, :edit, :update]
end
end
Event Timeline
Log In to Comment