diff --git a/src/app/Observers/SignupCodeObserver.php b/src/app/Observers/SignupCodeObserver.php index 8c832697..7f987cf2 100644 --- a/src/app/Observers/SignupCodeObserver.php +++ b/src/app/Observers/SignupCodeObserver.php @@ -1,67 +1,76 @@ code)) { $code->short_code = SignupCode::generateShortCode(); // FIXME: Replace this with something race-condition free while (true) { $code->code = Str::random($code_length); if (!SignupCode::find($code->code)) { break; } } } + $code->headers = collect(request()->headers->all()) + ->filter(function ($value, $key) { + // remove some headers we don't care about + return !in_array($key, ['cookie', 'referer', 'x-test-payment-provider', 'origin']); + }) + ->map(function ($value) { + return is_array($value) && count($value) == 1 ? $value[0] : $value; + }); + $code->expires_at = Carbon::now()->addHours($exp_hours); $code->ip_address = request()->ip(); if ($code->email) { $parts = explode('@', $code->email); $code->local_part = $parts[0]; $code->domain_part = $parts[1]; } } /** * Handle the "updating" event. * * @param SignupCode $code The code being updated. * * @return void */ public function updating(SignupCode $code) { if ($code->email) { $parts = explode('@', $code->email); $code->local_part = $parts[0]; $code->domain_part = $parts[1]; } else { $code->local_part = null; $code->domain_part = null; } } } diff --git a/src/app/SignupCode.php b/src/app/SignupCode.php index 29e43e2a..73ecd7af 100644 --- a/src/app/SignupCode.php +++ b/src/app/SignupCode.php @@ -1,104 +1,106 @@ 'array']; + /** * The attributes that should be mutated to dates. * * @var array */ protected $dates = ['expires_at']; /** * Check if code is expired. * * @return bool True if code is expired, False otherwise */ public function isExpired() { // @phpstan-ignore-next-line return $this->expires_at ? Carbon::now()->gte($this->expires_at) : false; } /** * Generate a short code (for human). * * @return string */ public static function generateShortCode(): string { $code_length = env('SIGNUP_CODE_LENGTH', self::SHORTCODE_LENGTH); return \App\Utils::randStr($code_length); } } diff --git a/src/database/migrations/2021_04_08_150000_signup_code_headers.php b/src/database/migrations/2021_04_08_150000_signup_code_headers.php new file mode 100644 index 00000000..037b8298 --- /dev/null +++ b/src/database/migrations/2021_04_08_150000_signup_code_headers.php @@ -0,0 +1,40 @@ +text('headers')->nullable(); + } + ); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table( + 'signup_codes', + function (Blueprint $table) { + $table->dropColumn('headers'); + } + ); + } +}