[ARVADOS] updated: f4189a0c74c5cf3bfe31f8ed83d845c21611653e

git at public.curoverse.com git at public.curoverse.com
Thu Jun 19 17:22:08 EDT 2014


Summary of changes:
 .../app/assets/javascripts/application.js          |  11 +
 .../app/assets/javascripts/collections.js          |   3 -
 .../app/assets/javascripts/infinite_scroll.js      |   3 +-
 .../workbench/app/assets/javascripts/log_viewer.js | 270 ++++++++++++++++++--
 .../app/assets/javascripts/select_modal.js         |  13 +
 apps/workbench/app/assets/javascripts/sizing.js    |   5 +-
 .../app/assets/stylesheets/application.css.scss    |   9 +
 .../app/assets/stylesheets/log_viewer.scss         |  32 ++-
 .../app/assets/stylesheets/select_modal.css.scss   |   1 +
 .../app/controllers/application_controller.rb      | 167 ++++++-------
 .../app/controllers/collections_controller.rb      |  40 +--
 .../app/controllers/user_agreements_controller.rb  |   1 +
 apps/workbench/app/models/arvados_base.rb          |   4 +
 .../app/views/application/_choose.html.erb         |  55 +++--
 .../workbench/app/views/application/_choose.js.erb |  22 +-
 .../app/views/application/_content.html.erb        |   2 -
 .../views/application/_projects_tree_menu.html.erb |  31 +++
 .../app/views/collections/_choose_rows.html.erb    |  18 +-
 .../collections/_show_chooser_preview.html.erb     |   2 +
 .../_show_object_description_cell.html.erb         |  14 --
 .../collections/_show_source_summary.html.erb      |  21 ++
 apps/workbench/app/views/collections/index.js.erb  |   1 -
 apps/workbench/app/views/collections/show.html.erb |  22 +-
 .../app/views/collections/show_file_links.html.erb |   7 +-
 apps/workbench/app/views/jobs/_show_log.html.erb   | 215 +++++++++++-----
 .../app/views/layouts/application.html.erb         |  43 +---
 .../_show_components_editable.html.erb             |   4 +-
 .../app/views/pipeline_instances/show.js.erb       |   1 -
 .../views/pipeline_templates/_choose_rows.html.erb |   5 +-
 .../_show_chooser_preview.html.erb                 |   4 +
 apps/workbench/app/views/projects/_choose.html.erb |   5 +-
 apps/workbench/app/views/users/home.js.erb         |   1 -
 .../test/functional/collections_controller_test.rb |   8 +
 .../test/functional/projects_controller_test.rb    |  26 +-
 doc/api/methods/jobs.html.textile.liquid           |  31 ++-
 doc/api/schema/Job.html.textile.liquid             |   6 +-
 .../api/app/controllers/application_controller.rb  |  11 +-
 .../app/controllers/arvados/v1/jobs_controller.rb  |  99 +++++++-
 services/api/app/models/collection.rb              |  34 +--
 services/api/test/fixtures/jobs.yml                |  16 ++
 services/api/test/fixtures/links.yml               |  10 +-
 .../arvados/v1/job_reuse_controller_test.rb        | 273 +++++++++++++++++++++
 42 files changed, 1187 insertions(+), 359 deletions(-)
 create mode 100644 apps/workbench/app/views/application/_projects_tree_menu.html.erb
 create mode 100644 apps/workbench/app/views/collections/_show_chooser_preview.html.erb
 delete mode 100644 apps/workbench/app/views/collections/_show_object_description_cell.html.erb
 create mode 100644 apps/workbench/app/views/collections/_show_source_summary.html.erb
 create mode 100644 apps/workbench/app/views/pipeline_templates/_show_chooser_preview.html.erb

       via  f4189a0c74c5cf3bfe31f8ed83d845c21611653e (commit)
       via  2aea6cdaf1e6ecf747801d02b26dba82d88cd860 (commit)
       via  fd4efd53d8510f7d5662d895f8a79ae3ab573b8b (commit)
       via  47042547e7873d63f764e85ace085a8da314afd3 (commit)
       via  aea4b0cd7553dfb27c3e6c448fcad349284d6cf4 (commit)
       via  ee435c5374d13f187290c7039c0e37dd5ae2ad00 (commit)
       via  085876306dd42d59d97b251e135e6cd157af4216 (commit)
       via  7e723d29f206fcc5ba4d8a26f8d547a72d5f0425 (commit)
       via  ebc3fddd97628a50148ed90531b0a18d1cc867f9 (commit)
       via  d9d357302419430ca762a9eb56ef5fda41fe47b9 (commit)
       via  b832c418442822700c684a31e04d5c095735ce3b (commit)
       via  032b8b8c489650409dab16ec49ca853016048b24 (commit)
       via  6d6b609a1952bd0edb87413f24753d7b85c093b7 (commit)
       via  784e112f3fcad487c9f359413fb0dcd8b09c3edb (commit)
       via  613773f364adb36de6b061ba5a78a6df0a53df4f (commit)
       via  8c9b4a1c7b4ad3feb5c0ccb14888aad7ed262e18 (commit)
       via  2fd0eba4e138bd9cadbdf03ea2ca37bbc3f87f24 (commit)
       via  143165afbe34d80c7bdd82d6abaf47fb00a5d059 (commit)
       via  f5254bc8e4c0d6f0169ce2de4c9ba43ff6fe87a5 (commit)
       via  5a4863dc935ecccebebc9b166c3c9915121b14d1 (commit)
       via  9c72375f74e8a251e9f09c8a16dbed9174417292 (commit)
       via  6743d58bac1eb91040fc422fcd07f3351360d506 (commit)
       via  715a760e661e589d454dadca9040729e651edc8a (commit)
       via  549f4a1deddb41f6abbc493a660d9fb0976da91a (commit)
       via  76dea8772ff5726836393c518088bd8a7e149cc5 (commit)
       via  89c1cc67e4ef23a971fa732ad1b7178566dd22fc (commit)
       via  21822c130f0d19eb4082a3b6bc99e45ce1017a8a (commit)
       via  e0cf8505654d0e1c20b3d6ad31eefdab1fa342fe (commit)
       via  a5e1609e6f34ee041a92fa089ccf0ed66448bf15 (commit)
       via  3f9aa0401350fc8a41a2dce81151da4aa050e771 (commit)
       via  976e8b27deea19cf863f33d579f5a361817493ba (commit)
       via  a8d207b68612e2e6d6afcd16b0c68f98bbaab16e (commit)
       via  d3b84be954b1d899b6364ff6259144f37c42fafe (commit)
       via  91f0f06d8791cdb880a5ce8267e86d565b38aae3 (commit)
       via  4cc70d306f608b6b7ca5076a6d066bb3e1c7bf2b (commit)
       via  189ce25a32a5916194597665435b269192a9baec (commit)
       via  02825a88733a13a58775774053fb0945e9adf693 (commit)
       via  d99707463cd5bf757322cde334c32e398abbf6f9 (commit)
       via  b8475bddb17b1c303b527524dd384f1bde514a36 (commit)
       via  1e2393533f678d4f50e3e98ba03a15e802f397bb (commit)
       via  b36d3de1cdda89a597410842acf4d02d372bf164 (commit)
      from  dff8a3876fab9719326bde7d51b17918270719e4 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit f4189a0c74c5cf3bfe31f8ed83d845c21611653e
Merge: 2aea6cd fd4efd5
Author: radhika <radhika at curoverse.com>
Date:   Thu Jun 19 17:05:19 2014 -0400

    Merge branch 'master' into 2659-anonymous-group
    
    Conflicts:
    	apps/workbench/app/views/layouts/application.html.erb

diff --cc apps/workbench/app/controllers/application_controller.rb
index bef3341,9e918f5..e6e28c6
--- a/apps/workbench/app/controllers/application_controller.rb
+++ b/apps/workbench/app/controllers/application_controller.rb
@@@ -10,10 -10,9 +10,10 @@@ class ApplicationController < ActionCon
    around_filter :thread_clear
    around_filter :thread_with_mandatory_api_token, except: ERROR_ACTIONS
    around_filter :thread_with_optional_api_token
 +  around_filter :use_anonymous_token_if_necessary
    before_filter :check_user_agreements, except: ERROR_ACTIONS
    before_filter :check_user_notifications, except: ERROR_ACTIONS
-   before_filter :find_object_by_uuid, except: [:index] + ERROR_ACTIONS
+   before_filter :find_object_by_uuid, except: [:index, :choose] + ERROR_ACTIONS
    theme :select_theme
  
    begin
diff --cc apps/workbench/app/models/arvados_base.rb
index 5c14b37,3b5ac86..da4b33c
--- a/apps/workbench/app/models/arvados_base.rb
+++ b/apps/workbench/app/models/arvados_base.rb
@@@ -295,8 -295,12 +295,12 @@@ class ArvadosBase < ActiveRecord::Bas
      self.class.to_s.underscore.humanize
    end
  
+   def self.class_for_display
+     self.to_s.underscore.humanize
+   end
+ 
    def self.creatable?
 -    current_user
 +    current_user && (!current_user[:uuid].ends_with?('anonymouspublic'))
    end
  
    def self.goes_in_projects?
diff --cc apps/workbench/app/views/layouts/application.html.erb
index cc3c6a2,23e0715..93fe189
--- a/apps/workbench/app/views/layouts/application.html.erb
+++ b/apps/workbench/app/views/layouts/application.html.erb
@@@ -169,39 -161,16 +169,16 @@@
        <nav class="navbar navbar-default breadcrumbs" role="navigation">
          <ul class="nav navbar-nav navbar-left">
            <li class="dropdown">
-             <a href="#" class="dropdown-toggle" data-toggle="dropdown" id="projects-menu">
-               <i class="fa fa-lg fa-fw fa-home"></i>
-               Projects
-               <span class="caret"></span>
-             </a>
-             <ul class="dropdown-menu" role="menu">
-               <li role="presentation" class="dropdown-header">
-                 <% if current_user.is_active %>
-                 <%= link_to projects_path('project[owner_uuid]' => current_project_uuid), method: 'post', class: 'btn btn-xs btn-default pull-right' do %>
-                   <i class="fa fa-plus"></i> New project
-                 <% end %>
-                 <% end %>
-                 My projects
-               </li>
-               <% my_project_tree.each do |pnode| %>
-                 <% next if pnode[:object].class != Group %>
-                 <li style="padding-left: <%= pnode[:depth]-1 %>em">
-                   <%= link_to(pnode[:object].name, project_path(pnode[:object].uuid), data: {object_uuid: pnode[:object].uuid, name: 'name'}) %>
-                 </li>
-               <% end %>
-               <li class="divider">
-               <li role="presentation" class="dropdown-header">
-                 Projects shared with me
-               </li>
-               <% shared_project_tree.each do |pnode| %>
-                 <% next if pnode[:object].class != Group %>
-                 <li style="padding-left: <%= pnode[:depth]-1 %>em">
-                   <%= link_to project_path(pnode[:object].uuid), data: {object_uuid: pnode[:object].uuid, name: 'name'} do %>
-                     <i class="fa fa-fw fa-share-alt" style="color:#aaa"></i> <%= pnode[:object].name %>
+             <%= render partial: "projects_tree_menu", locals: {
+                   :project_link_to => Proc.new do |pnode, &block|
+                     link_to(project_path(pnode[:object].uuid), data: {object_uuid: pnode[:object].uuid, name: 'name'}, &block)
+                   end,
 -                  :top_button => Proc.new do %>
++                  :top_button => Proc.new do %> <% if current_user.is_active%>
+                     <% link_to projects_path('project[owner_uuid]' => current_project_uuid), method: 'post', class: 'btn btn-xs btn-default pull-right' do %>
+                       <i class="fa fa-plus"></i> New project
 -                    <% end %>
++                    <% end %> <% end %>
                    <% end %>
-                 </li>
-               <% end %>
-             </ul>
+             <% } %>
            </li>
            <% project_breadcrumbs.each do |p| %>
              <li class="nav-separator">

commit 2aea6cdaf1e6ecf747801d02b26dba82d88cd860
Author: radhika <radhika at curoverse.com>
Date:   Thu Jun 19 16:51:48 2014 -0400

    2659: use around_filter to use anonymous user token

diff --git a/apps/workbench/app/controllers/application_controller.rb b/apps/workbench/app/controllers/application_controller.rb
index e3983ec..bef3341 100644
--- a/apps/workbench/app/controllers/application_controller.rb
+++ b/apps/workbench/app/controllers/application_controller.rb
@@ -10,7 +10,8 @@ class ApplicationController < ActionController::Base
   around_filter :thread_clear
   around_filter :thread_with_mandatory_api_token, except: ERROR_ACTIONS
   around_filter :thread_with_optional_api_token
-#  before_filter :check_user_agreements, except: ERROR_ACTIONS
+  around_filter :use_anonymous_token_if_necessary
+  before_filter :check_user_agreements, except: ERROR_ACTIONS
   before_filter :check_user_notifications, except: ERROR_ACTIONS
   before_filter :find_object_by_uuid, except: [:index] + ERROR_ACTIONS
   theme :select_theme
@@ -353,32 +354,12 @@ class ApplicationController < ActionController::Base
   def thread_with_api_token(login_optional = false)
     begin
       try_redirect_to_login = true
-
-      anonymous_user_token = Rails.configuration.anonymous_user_token
-      using_anonymous_user_token = false
-      if !params[:api_token] && !session[:arvados_api_token] &&
-          !Thread.current[:anonymous_api_token]
-        if session['arv-referrer'] == 'logout'
-          # do not use anonymous user token and let logout happen
-        else
-          if anonymous_user_token
-            params[:api_token] = anonymous_user_token
-            using_anonymous_user_token = true
-          end
-        end
-      else
-        if params[:api_token] && (params[:api_token] == anonymous_user_token)
-          using_anonymous_user_token = true
-        end
-      end
-
       if params[:api_token]
         try_redirect_to_login = false
         Thread.current[:arvados_api_token] = params[:api_token]
         # Before copying the token into session[], do a simple API
         # call to verify its authenticity.
         if verify_api_token
-         if !using_anonymous_user_token
           session[:arvados_api_token] = params[:api_token]
           u = User.current
           session[:user] = {
@@ -399,39 +380,27 @@ class ApplicationController < ActionController::Base
           else
             yield
           end
-         else     # using anonymous token
-            Thread.current[:user] = User.current
-            Thread.current[:anonymous_api_token] = params[:api_token]
-            session[:arvados_api_token] = nil
-            session[:user] = nil
-            redirect_to request.fullpath.sub(%r{([&\?]api_token=)[^&\?]*}, '')
-         end
         else
-          if using_anonymous_user_token
-            # bypass the invalid anonymous user token to prevent infinite looping
-            try_redirect_to_login = true
-            Thread.current[:anonymous_api_token] = nil
-          else
-            @errors = ['Invalid API token']
-            self.render_error status: 401
-          end
+          @errors = ['Invalid API token']
+          self.render_error status: 401
         end
-      elsif session[:arvados_api_token] || Thread.current[:anonymous_api_token]
+      elsif session[:arvados_api_token]
         # In this case, the token must have already verified at some
         # point, but it might have been revoked since.  We'll try
         # using it, and catch the exception if it doesn't work.
         try_redirect_to_login = false
-        if session[:arvados_api_token]
-          Thread.current[:arvados_api_token] = session[:arvados_api_token]
-        elsif Thread.current[:anonymous_api_token]
-          Thread.current[:arvados_api_token] = Thread.current[:anonymous_api_token]
-          Thread.current[:anonymous_api_token] = nil
-        end
+        Thread.current[:arvados_api_token] = session[:arvados_api_token]
         begin
           yield
         rescue ArvadosApiClient::NotLoggedInException
           try_redirect_to_login = true
         end
+      elsif Rails.configuration.anonymous_user_token
+        check_anonymous_token
+        if Thread.current[:arvados_api_token]
+          try_redirect_to_login = false
+          yield
+        end
       else
         logger.debug "No token received, session is #{session.inspect}"
       end
@@ -488,6 +457,51 @@ class ApplicationController < ActionController::Base
     end
   end
 
+  def use_anonymous_token_if_necessary
+    check_anonymous_token
+    yield
+  end
+
+  def check_anonymous_token
+    if session['arv-referrer'] == 'logout'
+      # do not use anonymous user token and let logout happen
+      return
+    end
+
+    anonymous_user_token = Rails.configuration.anonymous_user_token
+    if !anonymous_user_token
+      return
+    end
+
+    if !Thread.current[:arvados_api_token]
+      Thread.current[:arvados_api_token] = anonymous_user_token
+      if verify_api_token 
+        session[:arvados_api_token] = anonymous_user_token
+        u = User.current
+        session[:user] = {
+          uuid: u.uuid,
+          email: u.email,
+          first_name: u.first_name,
+          last_name: u.last_name,
+          is_active: u.is_active,
+          is_admin: u.is_admin,
+          prefs: u.prefs
+        }
+      end
+    elsif current_user && !current_user.andand.is_active
+      previous_api_token = Thread.current[:arvados_api_token]
+      if anonymous_user_token != previous_api_token
+        Thread.current[:arvados_api_token] = anonymous_user_token
+        valid_anonymous_token = verify_api_token
+        Thread.current[:arvados_api_token] = previous_api_token
+        verify_api_token
+        if valid_anonymous_token
+          Thread.current[:arvados_api_token] = anonymous_user_token
+        end
+      end
+    end
+  end
+
   def ensure_current_user_is_admin
     unless current_user and current_user.is_admin
       @errors = ['Permission denied']
@@ -496,6 +510,8 @@ class ApplicationController < ActionController::Base
   end
 
   def check_user_agreements
+    return if (Thread.current[:arvados_api_token] == Rails.configuration.anonymous_user_token)
+
     if current_user && !current_user.is_active
       if not current_user.is_invited
         return render 'users/inactive'
@@ -892,54 +908,4 @@ class ApplicationController < ActionController::Base
     @objects_for
   end
 
-  @@anonymous_group = nil
-  def self.anonymous_group
-    if !@@anonymous_group
-      anon_groups = @@anonymous_group = Group.where(name: 'Anonymous group')
-      anon_groups.each do |group|
-        if group.uuid.ends_with? 'anonymouspublic'
-          @@anonymous_group = group
-          break
-        end
-      end
-    end
-    @@anonymous_group
-  end
-
-  # helper method to create sharing link for anonymous user group
-  helper_method :share_with_anonymous_user
-  def share_with_anonymous_group uuid
-    anon_group = ApplicationController.anonymous_group
-    return if !anon_group
-
-    links = Link.where(link_class: 'permission',
-                       name: 'can_read',
-                       tail_uuid: anon_group[:uuid],
-                       head_uuid: uuid)
-
-    # no such link exists; so create one
-    if !links.any?
-      link = Link.create(link_class: 'permission',
-                         name: 'can_read',
-                         tail_uuid: anon_group[:uuid],
-                         head_uuid: uuid)
-    end
-  end
-
-  # helper method to delete sharing link for anonymous user group
-  helper_method :unshare_with_anonymous_user
-  def unshare_with_anonymous_group uuid
-    anon_group = ApplicationController.anonymous_group
-    return if !anon_group
-
-    links = Link.where(link_class: 'permission',
-                       name: 'can_read',
-                       tail_uuid: anon_group[:uuid],
-                       head_uuid: uuid)
-
-    links.each do |link|
-      link.destroy
-    end
-  end
-
 end
diff --git a/apps/workbench/app/controllers/user_agreements_controller.rb b/apps/workbench/app/controllers/user_agreements_controller.rb
index 6ab8ae2..9596160 100644
--- a/apps/workbench/app/controllers/user_agreements_controller.rb
+++ b/apps/workbench/app/controllers/user_agreements_controller.rb
@@ -1,6 +1,7 @@
 class UserAgreementsController < ApplicationController
   skip_before_filter :check_user_agreements
   skip_before_filter :find_object_by_uuid
+  skip_around_filter :use_anonymous_token_if_necessary
 
   def model_class
     Collection
diff --git a/apps/workbench/app/views/layouts/application.html.erb b/apps/workbench/app/views/layouts/application.html.erb
index 1bf1e7d..cc3c6a2 100644
--- a/apps/workbench/app/views/layouts/application.html.erb
+++ b/apps/workbench/app/views/layouts/application.html.erb
@@ -53,7 +53,7 @@
           <span class="icon-bar"></span>
         </button>
         <a class="navbar-brand" href="/"><%= Rails.configuration.site_name.downcase rescue Rails.application.class.parent_name %>
-          <% if current_user && !current_user.is_active %> . Your account is inactive and viewing public data. <% end %>
+          <% if current_user && !current_user.is_active %> . You are viewing public data. <% end %>
         </a>
       </div>
 
diff --git a/apps/workbench/test/functional/projects_controller_test.rb b/apps/workbench/test/functional/projects_controller_test.rb
index b338aa8..840fd0f 100644
--- a/apps/workbench/test/functional/projects_controller_test.rb
+++ b/apps/workbench/test/functional/projects_controller_test.rb
@@ -1,7 +1,16 @@
 require 'test_helper'
 
 class ProjectsControllerTest < ActionController::TestCase
-  test "inactive user is asked to sign user agreements on front page" do
+  setup do
+    @anonymous_token = Rails.configuration.anonymous_user_token
+  end
+
+  teardown do
+    Rails.configuration.anonymous_user_token = @anonymous_token
+  end
+
+  test "inactive user is asked to sign user agreements on front page when anonymous user token is not configured" do
+    Rails.configuration.anonymous_user_token = false
     get :index, {}, session_for(:inactive)
     assert_response :success
     assert_not_empty assigns(:required_user_agreements),
@@ -9,4 +18,19 @@ class ProjectsControllerTest < ActionController::TestCase
     assert_template 'user_agreements/index',
     "Inactive user was not presented with a user agreement at the front page"
   end
+
+  test "inactive user is asked to sign user agreements on front page" do
+    get :index, {}, session_for(:inactive)
+    assert_response :success
+    if !@anonymous_token
+      assert_not_empty assigns(:required_user_agreements),
+      "Inactive user did not have required_user_agreements"
+      assert_template 'user_agreements/index',
+      "Inactive user was not presented with a user agreement at the front page"
+    else
+      assert_nil assigns(:required_user_agreements),
+      "Inactive user did not have required_user_agreements"
+    end
+  end
+
 end

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list