Page MenuHomeGRNET

No OneTemporary

File Metadata

Created
Sat, Aug 9, 12:13 AM
diff --git a/app/controllers/hosts_controller.rb b/app/controllers/hosts_controller.rb
index ce84ca5..6a4a06d 100644
--- a/app/controllers/hosts_controller.rb
+++ b/app/controllers/hosts_controller.rb
@@ -1,210 +1,210 @@
class HostsController < ApplicationController
before_action :require_logged_in, except: :fd_config
before_action :fetch_host, only: [:show, :edit, :update, :destroy, :submit_config,
:revoke, :disable, :regenerate_token]
before_action :fetch_hosts_of_user, only: [:new, :create]
# GET /hosts/new
def new
@host = Host.new
@host.port = 9102
@host.email_recipients = [current_user.email]
end
# POST /hosts
def create
@host = Host.new(fetch_params)
set_host_type
@host.verified = !@host.institutional?
if user_can_add_this_host? && @host.save
flash[:success] = 'Host created successfully'
current_user.hosts << @host
UserMailer.notify_admin(current_user, @host.fqdn).deliver
- redirect_to host_path @host
+ redirect_to new_host_simple_config_path @host
else
flash[:error] = 'Host was not created'
render :new
end
end
# GET /hosts/1
def show
@schedules = @host.job_templates.map(&:schedule)
@filesets = @host.job_templates.map(&:fileset)
end
# GET /hosts/1/edit
def edit
if current_user.needs_host_list?
@hosts_of_user = current_user.hosts.pluck(:fqdn)
end
end
# PATCH /hosts/1
def update
updates = fetch_params.slice(:port, :email_recipients)
if updates.present? && @host.update_attributes(updates)
@host.recalculate if @host.bacula_ready?
flash[:success] = 'Host updated successfully. You must update your file daemon accordingly.'
redirect_to host_path @host
else
render :edit
end
end
# DELETE /hosts/1
def destroy
if (@host.client.nil? || @host.remove_from_bacula(true)) && @host.destroy
flash[:success] = 'Host destroyed successfully'
else
flash[:error] = 'Host not destroyed'
end
redirect_to root_path
end
# POST /hosts/1/disable
def disable
if @host.disable_jobs_and_update
flash[:success] = 'Client disabled'
else
flash[:error] = 'Something went wrong, try again later'
end
redirect_to host_path(@host)
end
# POST /hosts/1/submit_config
def submit_config
if @host.dispatch_to_bacula
flash[:success] = 'Host configuration sent to Bacula successfully'
else
flash[:error] = 'Something went wrong, try again later'
end
redirect_to host_path(@host)
end
# DELETE /hosts/1/revoke
def revoke
if @host.remove_from_bacula
flash[:success] = 'Host configuration removed from Bacula successfully'
else
flash[:error] = 'Something went wrong, try again later'
end
redirect_to root_path
end
# POST /hosts/1/regenerate_token
def regenerate_token
if @host.recalculate_token
@host.recalculate if @host.bacula_ready?
flash[:success] = 'Host updated successfully. You must update your file daemon accordingly.'
else
flash[:error] = 'Something went wrong, try again later'
end
redirect_to host_path(@host)
end
# GET /hosts/fetch_vima_hosts
def fetch_vima_hosts
if params[:code].blank?
return redirect_to client.auth_code.authorize_url(:redirect_uri => redirect_uri,
scope: 'read')
end
access_token = client.auth_code.get_token(
params['code'],
{ :redirect_uri => redirect_uri },
{ :mode => :query, :param_name => "access_token", :header_format => "" }
)
vms = access_token.get(
'https://vima.grnet.gr/instances/list?tag=vima:service:archiving',
{ mode: :query, param_name: 'access_token' }
).parsed.deep_symbolize_keys[:response][:instances]
session[:vms] = vms.first(50)
current_user.temp_hosts = vms
current_user.hosts_updated_at = Time.now
current_user.save
Host.where(fqdn: vms).each do |host|
host.users << current_user unless host.users.include?(current_user)
end
redirect_to new_host_path
end
# GET /hosts/:id/fd_config?token=A_TOKEN
def fd_config
user = User.find_by(token: params[:token]) if params[:token]
return redirect_to clients_path if user.nil?
@host = user.hosts.find_by(id: params[:id])
return redirect_to clients_path unless @host
render text: [
@host.bacula_fd_filedaemon_config,
@host.bacula_fd_director_config(false),
@host.bacula_fd_messages_config
].join("\n\n")
end
private
def client
OAuth2::Client.new(
Rails.application.secrets.oauth2_vima_client_id,
Rails.application.secrets.oauth2_vima_secret,
site: 'https://vima.grnet.gr',
token_url: "/o/token",
authorize_url: "/o/authorize",
:ssl => {:ca_path => "/etc/ssl/certs"}
)
end
def redirect_uri
uri = URI.parse(request.url)
uri.scheme = 'https' unless Rails.env.development?
uri.path = '/hosts/fetch_vima_hosts'
uri.query = nil
uri.to_s
end
def fetch_hosts_of_user
return if not current_user.needs_host_list?
@hosts_of_user = session[:vms] - current_user.hosts.pluck(:fqdn)
end
def fetch_host
@host = current_user.hosts.includes(job_templates: [:fileset, :schedule]).find(params[:id])
end
def fetch_params
params.require(:host).permit(:fqdn, :port, email_recipients: [])
end
def user_can_add_this_host?
!current_user.needs_host_list? || @hosts_of_user.include?(@host.fqdn)
end
def set_host_type
@host.origin = if current_user.vima?
:vima
elsif current_user.okeanos?
:okeanos
else
:institutional
end
end
end
diff --git a/app/controllers/simple_configs_controller.rb b/app/controllers/simple_configs_controller.rb
new file mode 100644
index 0000000..b01d04d
--- /dev/null
+++ b/app/controllers/simple_configs_controller.rb
@@ -0,0 +1,28 @@
+class SimpleConfigsController < ApplicationController
+ before_action :require_logged_in
+ before_action :fetch_host
+
+ # GET /hosts/1/simple_configs/new
+ def new
+ @simple_config = @host.simple_configurations.new
+ @simple_config.randomize
+ end
+
+ # POST /hosts/1/simple_configs
+ def create
+ @simple_config = @host.simple_configurations.new(fetch_config_params)
+ @simple_config.save
+ @simple_config.create_config
+ redirect_to host_path(@host, anchor: :jobs)
+ end
+
+ private
+
+ def fetch_host
+ @host = current_user.hosts.find(params[:host_id])
+ end
+
+ def fetch_config_params
+ params.require(:simple_configuration).permit(:name, :day, :hour, :minute)
+ end
+end
diff --git a/app/views/simple_configs/new.html.erb b/app/views/simple_configs/new.html.erb
new file mode 100644
index 0000000..1b0f190
--- /dev/null
+++ b/app/views/simple_configs/new.html.erb
@@ -0,0 +1,22 @@
+<div class="row">
+ <div class="col-xs-4">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3>New Client Config</h3>
+ </div>
+
+ <div class="panel-body">
+ <%= bootstrap_form_for(@simple_config, url: host_simple_configs_path(@host),
+ layout: :horizontal, label_col: 'col-xs-3',
+ control_col: 'col-xs-8') do |f| %>
+ <%= f.text_field :name %>
+ <hr />
+ <%= f.select :day, options_for_select(SimpleConfiguration.days.keys, @simple_config.day), require: true %>
+ <%= f.number_field :hour, value: @simple_config.hour, min: 0, max: 23 %>
+ <%= f.number_field :minute, value: @simple_config.minute, min: 0, max: 59 %>
+ <%= f.submit 'Create Config', class: 'btn btn-success col-xs-3 col-xs-offset-9' %>
+ <% end %>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/config/routes.rb b/config/routes.rb
index 4748a64..fa654c2 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,128 +1,130 @@
Rails.application.routes.draw do
root 'application#index'
get 'faq' => 'application#faq'
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 :invitations, only: [:create]
get '/invitations/:host_id/:verification_code/accept' => 'invitations#accept',
as: :accept_invitation
resources :hosts, only: [:new, :create, :show, :edit, :update, :destroy] do
member do
post :submit_config
post :disable
post :regenerate_token
delete :revoke
get :fd_config
end
collection do
get :fetch_vima_hosts, to: 'hosts#fetch_vima_hosts', as: :fetch_vima
end
+ resources :simple_configs, only: [:new, :create]
+
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
resources :users, only: :show do
member do
patch :generate_token
end
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: [] do
collection do
get :unverified
end
member do
post :verify
put :set_quota
end
end
resources :users, only: [:index, :new, :create, :show, :edit, :update] do
member do
patch :ban
patch :unban
patch :revoke_admin
patch :grant_admin
end
end
resources :pools, only: [:index, :new, :create]
resources :faqs
end
namespace :api, defaults: { format: :json } do
scope module: :v1, constraints: ApiVersion.new(version: 1, default: true) do
resources :clients, only: [:index, :show] do
member do
post :backup
post :restore
end
end
end
end
end

Event Timeline