From 9b5492c5e56a499847d676913926a103e313aad5 Mon Sep 17 00:00:00 2001
From: Simon Mayer <simon.mayer@onb.ac.at>
Date: Tue, 27 Sep 2022 13:06:45 +0200
Subject: [PATCH] Update code for authentication to save also the labs user
 name, display it for public data sets

---
 app/controllers/concerns/authentication.rb        | 14 ++++++++------
 app/models/user.rb                                |  1 +
 app/views/dataset/_public_datasets_modal.html.erb |  2 +-
 db/migrate/20210721081005_create_users.rb         |  1 +
 db/schema.rb                                      |  1 +
 5 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/app/controllers/concerns/authentication.rb b/app/controllers/concerns/authentication.rb
index a64e42a..f6de47e 100644
--- a/app/controllers/concerns/authentication.rb
+++ b/app/controllers/concerns/authentication.rb
@@ -11,16 +11,17 @@ module Authentication
   end
 
   def authenticate_user!
-    id_dict = { "labs_user_id" => decrypt_header(request.headers["X-Auth-Newseye-Token"]) }
-    # id_dict = { "labs_user_id" => "42" }
-    @user = User.find_by(labs_user_id: id_dict["labs_user_id"])
+    user_dict = { "labs_user_id" => decrypt_header(request.headers["X-Auth-Newseye-Token"])[0],
+                  "labs_user_name" => decrypt_header(request.headers["X-Auth-Newseye-Token"])[1] }
+    # user_dict = { "labs_user_id" => "42", "labs_user_name" => "dummyuser" }
+    @user = User.find_by(labs_user_id: user_dict["labs_user_id"])
     if @user
       if !session[:current_user_id]
         # puts "Logging in the user since current_user_id was not set"
         login @user
       end
     else
-      @user = User.new(id_dict)
+      @user = User.new(user_dict)
       if @user.save
         login @user
       end
@@ -36,12 +37,12 @@ module Authentication
   private
 
   def current_user
-    Current.user ||= User.find_by(labs_user_id: decrypt_header(request.headers["X-Auth-Newseye-Token"]))
+    Current.user ||= User.find_by(labs_user_id: decrypt_header(request.headers["X-Auth-Newseye-Token"])[0])
     # Current.user ||= User.find_by(labs_user_id: "42")
   end
 
   def decrypt_header(token)
-    private_key = ENV['NEP_AUTH_PRIVATE_KEY'] || "OFE_GQ8Ri8MX-0rH_T0e9ZFIhy-q0n2VxBWPoOyJ1I0="
+    private_key = ENV["NEP_AUTH_PRIVATE_KEY"] || "OFE_GQ8Ri8MX-0rH_T0e9ZFIhy-q0n2VxBWPoOyJ1I0="
     unpacked_key = Base64.urlsafe_decode64(private_key)
     signing_key = unpacked_key[0..15]
     encryption_key = unpacked_key[16..32]
@@ -67,6 +68,7 @@ module Authentication
       d.key = encryption_key
       d.iv = iv
       plain = d.update(ciphertext) + d.final
+      token_tuple = plain.split(",", 2)
     rescue => e
       # do something now
       puts e.message, e.backtrace
diff --git a/app/models/user.rb b/app/models/user.rb
index f02f51b..08fcfee 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,5 +1,6 @@
 class User < ApplicationRecord
   attribute :labs_user_id, presence: true, unique: true
+  attribute :labs_user_name, presence: true, unique: true
 
   has_many :experiments
   has_many :datasets
diff --git a/app/views/dataset/_public_datasets_modal.html.erb b/app/views/dataset/_public_datasets_modal.html.erb
index a8e1a98..98614d5 100644
--- a/app/views/dataset/_public_datasets_modal.html.erb
+++ b/app/views/dataset/_public_datasets_modal.html.erb
@@ -29,7 +29,7 @@
                             <td>
                                 <% user = User.find(d.user_id) %>
                                 <%# <% username = user.email[0...user.email.index('@')] %> 
-                                <% username = user.id %>
+                                <% username = user.labs_user_name %>
                                 <%= username %>
                             </td>
                             <td>
diff --git a/db/migrate/20210721081005_create_users.rb b/db/migrate/20210721081005_create_users.rb
index d2be7d5..7d36ddb 100644
--- a/db/migrate/20210721081005_create_users.rb
+++ b/db/migrate/20210721081005_create_users.rb
@@ -2,6 +2,7 @@ class CreateUsers < ActiveRecord::Migration[6.1]
   def change
     create_table :users do |t|
       t.string :labs_user_id, null: false, unique: true
+      t.string :labs_user_name, null: false, unique: true
 
       t.timestamps null: false
     end
diff --git a/db/schema.rb b/db/schema.rb
index 332f259..43472e2 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -78,6 +78,7 @@ ActiveRecord::Schema.define(version: 2021_11_23_112405) do
 
   create_table "users", force: :cascade do |t|
     t.string "labs_user_id", null: false
+    t.string "labs_user_name", null: false
     t.datetime "created_at", precision: 6, null: false
     t.datetime "updated_at", precision: 6, null: false
     t.index ["labs_user_id"], name: "index_users_on_labs_user_id", unique: true
-- 
GitLab