diff --git a/app/Circle.php b/app/Circle.php index fdce9fcd0..e4b6d3087 100644 --- a/app/Circle.php +++ b/app/Circle.php @@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Model; class Circle extends Model { protected $fillable = [ + 'profile_id', 'name', 'description', 'bcc', diff --git a/app/Http/Controllers/UserInviteController.php b/app/Http/Controllers/UserInviteController.php new file mode 100644 index 000000000..c9f83301f --- /dev/null +++ b/app/Http/Controllers/UserInviteController.php @@ -0,0 +1,52 @@ +paginate(10); + $limit = config('pixelfed.user_invites.limit.total'); + $used = UserInvite::whereUserId(Auth::id())->count(); + return view('settings.invites.home', compact('invites', 'limit', 'used')); + } + + public function store(Request $request) + { + abort_unless(Auth::check(), 403); + $this->validate($request, [ + 'email' => 'required|email|unique:users|unique:user_invites', + 'message' => 'nullable|string|max:500', + 'tos' => 'required|accepted' + ]); + + $invite = new UserInvite; + $invite->user_id = Auth::id(); + $invite->profile_id = Auth::user()->profile->id; + $invite->email = $request->input('email'); + $invite->message = $request->input('message'); + $invite->key = (string) Str::uuid(); + $invite->token = str_random(32); + $invite->save(); + + return redirect(route('settings.invites')); + } +} diff --git a/app/Transformer/Api/StatusTransformer.php b/app/Transformer/Api/StatusTransformer.php index 3710aa1ff..16b1a8de0 100644 --- a/app/Transformer/Api/StatusTransformer.php +++ b/app/Transformer/Api/StatusTransformer.php @@ -17,35 +17,33 @@ class StatusTransformer extends Fractal\TransformerAbstract public function transform(Status $status) { - return Cache::remember('transform:status:'. $status->url(), 60, function() use($status) { - return [ - 'id' => (string) $status->id, - 'uri' => $status->url(), - 'url' => $status->url(), - 'in_reply_to_id' => $status->in_reply_to_id, - 'in_reply_to_account_id' => $status->in_reply_to_profile_id, - 'reblog' => $status->reblog_of_id || $status->in_reply_to_id ? $this->transform($status->parent()) : null, - 'content' => $status->rendered ?? $status->caption, - 'created_at' => $status->created_at->format('c'), - 'emojis' => [], - 'reblogs_count' => $status->shares()->count(), - 'favourites_count' => $status->likes()->count(), - 'reblogged' => $status->shared(), - 'favourited' => $status->liked(), - 'muted' => null, - 'sensitive' => (bool) $status->is_nsfw, - 'spoiler_text' => $status->cw_summary, - 'visibility' => $status->visibility, - 'application' => [ - 'name' => 'web', - 'website' => null - ], - 'language' => null, - 'pinned' => null, + return [ + 'id' => (string) $status->id, + 'uri' => $status->url(), + 'url' => $status->url(), + 'in_reply_to_id' => $status->in_reply_to_id, + 'in_reply_to_account_id' => $status->in_reply_to_profile_id, + 'reblog' => $status->reblog_of_id || $status->in_reply_to_id ? $this->transform($status->parent()) : null, + 'content' => $status->rendered ?? $status->caption, + 'created_at' => $status->created_at->format('c'), + 'emojis' => [], + 'reblogs_count' => $status->shares()->count(), + 'favourites_count' => $status->likes()->count(), + 'reblogged' => $status->shared(), + 'favourited' => $status->liked(), + 'muted' => null, + 'sensitive' => (bool) $status->is_nsfw, + 'spoiler_text' => $status->cw_summary, + 'visibility' => $status->visibility, + 'application' => [ + 'name' => 'web', + 'website' => null + ], + 'language' => null, + 'pinned' => null, - 'pf_type' => $status->type ?? $status->setType(), - ]; - }); + 'pf_type' => $status->type ?? $status->setType(), + ]; } public function includeAccount(Status $status) diff --git a/app/UserInvite.php b/app/UserInvite.php new file mode 100644 index 000000000..c8761a775 --- /dev/null +++ b/app/UserInvite.php @@ -0,0 +1,15 @@ +key, $this->token]); + return $url; + } +} diff --git a/config/hashing.php b/config/hashing.php index 6ea081a61..81cd9df0b 100644 --- a/config/hashing.php +++ b/config/hashing.php @@ -29,7 +29,7 @@ return [ */ 'bcrypt' => [ - 'rounds' => 10, + 'rounds' => env('BCRYPT_COST', 10), ], /* @@ -44,9 +44,9 @@ return [ */ 'argon' => [ - 'memory' => 1024, - 'threads' => 2, - 'time' => 2, + 'memory' => env('ARGON_MEM', 1024), + 'threads' => env('ARGON_THREADS', 2), + 'time' => env('ARGON_TIME', 2), ], ]; diff --git a/database/migrations/2019_02_15_033323_create_user_invites_table.php b/database/migrations/2019_02_15_033323_create_user_invites_table.php new file mode 100644 index 000000000..62bfbd5b5 --- /dev/null +++ b/database/migrations/2019_02_15_033323_create_user_invites_table.php @@ -0,0 +1,39 @@ +bigIncrements('id'); + $table->bigInteger('user_id')->unsigned()->index(); + $table->bigInteger('profile_id')->unsigned()->index(); + $table->string('email')->unique()->index(); + $table->text('message')->nullable(); + $table->string('key'); + $table->string('token'); + $table->timestamp('valid_until')->nullable(); + $table->timestamp('used_at')->nullable()->index(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_invites'); + } +}