Page MenuHomeGRNET

No OneTemporary

File Metadata

Created
Sun, Aug 10, 5:44 AM
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