From b76f2e97b6f2efbe5e524776a6b6a53bbad43448 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Thu, 6 Jun 2013 18:19:52 -0400 Subject: [PATCH] add authorized_keys views and editable fields --- .../app/controllers/application_controller.rb | 20 ++++++++++++ apps/workbench/app/models/arvados_base.rb | 20 ++++++++++++ apps/workbench/app/models/authorized_key.rb | 7 +++++ apps/workbench/app/models/collection.rb | 4 +++ apps/workbench/app/models/job.rb | 3 ++ .../workbench/app/models/pipeline_instance.rb | 4 +++ .../application/_arvados_object.html.erb | 3 ++ .../application/_arvados_object_attr.html.erb | 2 ++ .../app/views/authorized_keys/_form.html.erb | 31 +++++++++++++++++++ .../app/views/authorized_keys/edit.html.erb | 1 + .../app/views/authorized_keys/index.html.erb | 2 +- .../app/views/authorized_keys/new.html.erb | 1 + .../app/views/authorized_keys/show.html.erb | 1 + 13 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 apps/workbench/app/views/authorized_keys/_form.html.erb create mode 100644 apps/workbench/app/views/authorized_keys/edit.html.erb create mode 100644 apps/workbench/app/views/authorized_keys/new.html.erb create mode 100644 apps/workbench/app/views/authorized_keys/show.html.erb diff --git a/apps/workbench/app/controllers/application_controller.rb b/apps/workbench/app/controllers/application_controller.rb index 619c4b52a7..f66f968d65 100644 --- a/apps/workbench/app/controllers/application_controller.rb +++ b/apps/workbench/app/controllers/application_controller.rb @@ -65,6 +65,24 @@ class ApplicationController < ActionController::Base end end + def new + @object = model_class.new + end + + def update + if @object.update_attributes params[@object.class.to_s.underscore.singularize.to_sym] + show + else + self.render_error status: 422 + end + end + + def create + @object = model_class.new params[model_class.to_s.singularize.to_sym] + @object.save! + redirect_to @object + end + def current_user if Thread.current[:arvados_api_token] @current_user ||= User.current @@ -121,6 +139,8 @@ class ApplicationController < ActionController::Base rescue ArvadosApiClient::NotLoggedInException try_redirect_to_login = true end + else + logger.debug "session is #{session.inspect}" end if try_redirect_to_login respond_to do |f| diff --git a/apps/workbench/app/models/arvados_base.rb b/apps/workbench/app/models/arvados_base.rb index e6d10f0eeb..268b7b9a8c 100644 --- a/apps/workbench/app/models/arvados_base.rb +++ b/apps/workbench/app/models/arvados_base.rb @@ -187,6 +187,22 @@ class ArvadosBase < ActiveRecord::Base } end + def editable? + (current_user and + (current_user.is_admin or + current_user.uuid == self.owner)) + end + + def attribute_editable?(attr) + if "created_at modified_at modified_by_user modified_by_client updated_at".index(attr.to_s) + false + elsif "uuid owner".index(attr.to_s) + current_user and current_user.is_admin + else + true + end + end + def self.resource_class_for_uuid(uuid, opts={}) if uuid.is_a? ArvadosBase return uuid.class @@ -223,4 +239,8 @@ class ArvadosBase < ActiveRecord::Base @etag = nil self end + + def current_user + Thread.current[:user] + end end diff --git a/apps/workbench/app/models/authorized_key.rb b/apps/workbench/app/models/authorized_key.rb index a56021682c..62ee83238d 100644 --- a/apps/workbench/app/models/authorized_key.rb +++ b/apps/workbench/app/models/authorized_key.rb @@ -1,2 +1,9 @@ class AuthorizedKey < ArvadosBase + def attribute_editable?(attr) + if attr.to_s == 'authorized_user' + current_user and current_user.is_admin + else + super(attr) + end + end end diff --git a/apps/workbench/app/models/collection.rb b/apps/workbench/app/models/collection.rb index d96146143d..cfbb640504 100644 --- a/apps/workbench/app/models/collection.rb +++ b/apps/workbench/app/models/collection.rb @@ -8,4 +8,8 @@ class Collection < ArvadosBase tot end end + + def attribute_editable?(attr) + false + end end diff --git a/apps/workbench/app/models/job.rb b/apps/workbench/app/models/job.rb index e716df75f9..f88834e0c3 100644 --- a/apps/workbench/app/models/job.rb +++ b/apps/workbench/app/models/job.rb @@ -1,2 +1,5 @@ class Job < ArvadosBase + def attribute_editable?(attr) + false + end end diff --git a/apps/workbench/app/models/pipeline_instance.rb b/apps/workbench/app/models/pipeline_instance.rb index b8c74dfa57..81cd42bf46 100644 --- a/apps/workbench/app/models/pipeline_instance.rb +++ b/apps/workbench/app/models/pipeline_instance.rb @@ -16,4 +16,8 @@ class PipelineInstance < ArvadosBase end end end + + def attribute_editable?(attr) + attr == 'name' + end end diff --git a/apps/workbench/app/views/application/_arvados_object.html.erb b/apps/workbench/app/views/application/_arvados_object.html.erb index 77d236efb9..b170ba7fad 100644 --- a/apps/workbench/app/views/application/_arvados_object.html.erb +++ b/apps/workbench/app/views/application/_arvados_object.html.erb @@ -1,3 +1,4 @@ +<%= form_for @object do |f| %> @@ -7,6 +8,8 @@ <% end %>
+<% end %> +
 <%= JSON.pretty_generate(@object.attributes) rescue nil %>
 
diff --git a/apps/workbench/app/views/application/_arvados_object_attr.html.erb b/apps/workbench/app/views/application/_arvados_object_attr.html.erb index cb296c58de..7a5d60df65 100644 --- a/apps/workbench/app/views/application/_arvados_object_attr.html.erb +++ b/apps/workbench/app/views/application/_arvados_object_attr.html.erb @@ -19,6 +19,8 @@ <%= attr %> <% if attr == 'uuid' and (uuid = attrvalue.split('-')).size == 3 %> <%= uuid[0..-2].join('-') %>-<%= uuid[-1] %> + <% elsif @object.attribute_editable?(attr) %> + <%= link_to "#{attrvalue}", '#', { "data-type" => "text", "data-resource" => @object.class.to_s.singularize.underscore, "data-name" => attr, "data-url" => url_for(action: "update", id: @object.uuid), "data-original-title" => "Enter #{attr}", :class => "editable" } %> <% else %> <%= link_to_if_arvados_object attrvalue, {referring_attr: attr, referring_object: @object, with_prefixes: true, with_class_name: true} %> <% end %> diff --git a/apps/workbench/app/views/authorized_keys/_form.html.erb b/apps/workbench/app/views/authorized_keys/_form.html.erb new file mode 100644 index 0000000000..5a7231d07f --- /dev/null +++ b/apps/workbench/app/views/authorized_keys/_form.html.erb @@ -0,0 +1,31 @@ +<%= form_for @object do |f| %> + + + + + + + + + + + + + + +
+ name + + <%= f.text_field :name %> +
+ authorized user + + <%= f.text_field :authorized_user %> +
+ public key + + <%= f.text_area :public_key %> +
+ <%= f.submit class: 'btn btn-primary' %> +
+<% end %> diff --git a/apps/workbench/app/views/authorized_keys/edit.html.erb b/apps/workbench/app/views/authorized_keys/edit.html.erb new file mode 100644 index 0000000000..23997ae13a --- /dev/null +++ b/apps/workbench/app/views/authorized_keys/edit.html.erb @@ -0,0 +1 @@ +<%= render partial: 'form' %> diff --git a/apps/workbench/app/views/authorized_keys/index.html.erb b/apps/workbench/app/views/authorized_keys/index.html.erb index a02ebc3d1b..4658af851e 100644 --- a/apps/workbench/app/views/authorized_keys/index.html.erb +++ b/apps/workbench/app/views/authorized_keys/index.html.erb @@ -18,7 +18,7 @@ - <% @objects.sort_by { |ak| ak[:created_at] }.reverse.each do |g| %> + <% @objects.sort_by { |ak| ak[:created_at] }.reverse.each do |ak| %> diff --git a/apps/workbench/app/views/authorized_keys/new.html.erb b/apps/workbench/app/views/authorized_keys/new.html.erb new file mode 100644 index 0000000000..23997ae13a --- /dev/null +++ b/apps/workbench/app/views/authorized_keys/new.html.erb @@ -0,0 +1 @@ +<%= render partial: 'form' %> diff --git a/apps/workbench/app/views/authorized_keys/show.html.erb b/apps/workbench/app/views/authorized_keys/show.html.erb new file mode 100644 index 0000000000..90790856ae --- /dev/null +++ b/apps/workbench/app/views/authorized_keys/show.html.erb @@ -0,0 +1 @@ +<%= render :partial => 'application/arvados_object' %> -- 2.30.2