From c27c751543c7d0afb78da4590ad503d3a68fe0fe Mon Sep 17 00:00:00 2001
From: Daniel Supernault <danielsupernault@gmail.com>
Date: Sat, 15 Jun 2019 23:31:00 -0600
Subject: [PATCH] Update AuthLogin listener

---
 app/Listeners/AuthLogin.php | 47 +++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/app/Listeners/AuthLogin.php b/app/Listeners/AuthLogin.php
index 7d3059a8f..f2e258e90 100644
--- a/app/Listeners/AuthLogin.php
+++ b/app/Listeners/AuthLogin.php
@@ -31,9 +31,45 @@ class AuthLogin
             return;
         }
 
+        $this->userProfile($user);
         $this->userSettings($user);
         $this->userState($user);
         $this->userDevice($user);
+        $this->userProfileId($user);
+    }
+
+    protected function userProfile($user)
+    {
+        if (empty($user->profile)) {
+            $profile = DB::transaction(function() use($user) {
+                $profile = new Profile();
+                $profile->user_id = $user->id;
+                $profile->username = $user->username;
+                $profile->name = $user->name;
+                $pkiConfig = [
+                    'digest_alg'       => 'sha512',
+                    'private_key_bits' => 2048,
+                    'private_key_type' => OPENSSL_KEYTYPE_RSA,
+                ];
+                $pki = openssl_pkey_new($pkiConfig);
+                openssl_pkey_export($pki, $pki_private);
+                $pki_public = openssl_pkey_get_details($pki);
+                $pki_public = $pki_public['key'];
+
+                $profile->private_key = $pki_private;
+                $profile->public_key = $pki_public;
+                $profile->save();
+                return $profile;
+            });
+            DB::transaction(function() use($user, $profile) {
+                $user = User::findOrFail($user->id);
+                $user->profile_id = $profile->id;
+                $user->save();
+
+                CreateAvatar::dispatch($profile);
+            });
+
+        }
     }
 
     protected function userSettings($user)
@@ -88,4 +124,15 @@ class AuthLogin
             ]);
         });
     }
+
+    protected function userProfileId($user)
+    {
+        if($user->profile_id == null) {
+            DB::transaction(function() use($user) {
+                $profile = $user->profile;
+                $user->profile_id = $profile->id;
+                $user->save();
+            });
+        }
+    }
 }