the browser-facing portion of osu!
at master 2.5 kB view raw
1<?php 2 3// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 4// See the LICENCE file in the repository root for full licence text. 5 6namespace App\Http\Controllers\InterOp; 7 8use App\Exceptions\ModelNotSavedException; 9use App\Exceptions\ValidationException; 10use App\Http\Controllers\Controller; 11use App\Libraries\UserRegistration; 12use App\Models\Beatmap; 13use App\Models\User; 14use App\Models\UserAchievement; 15use App\Transformers\CurrentUserTransformer; 16 17class UsersController extends Controller 18{ 19 public function achievement($id, $achievementId, $beatmapId = null) 20 { 21 $achievement = app('medals')->byIdOrFail($achievementId); 22 $unlocked = UserAchievement::unlock( 23 User::findOrFail($id), 24 $achievement, 25 Beatmap::find($beatmapId), 26 ); 27 28 abort_unless($unlocked, 422, 'user already unlocked the specified achievement'); 29 30 datadog_increment('user_achievement_unlock', ['id' => $achievementId]); 31 32 return $achievement->getKey(); 33 } 34 35 public function store() 36 { 37 $request = request()->all(); 38 $params = get_params($request, 'user', ['username', 'user_email', 'group', 'password', 'country_acronym']); 39 $params['user_ip'] = '127.0.0.1'; 40 $params['country_acronym'] = $params['country_acronym'] ?? request_country() ?? ''; 41 42 if (isset($request['source_user_id'])) { 43 $sourceUser = User::find($request['source_user_id']); 44 45 if ($sourceUser === null) { 46 abort(404, "Can't find User specified in source_user_id"); 47 } 48 49 if (!isset($params['user_email']) && isset($params['username'])) { 50 $sourceEmailParts = explode('@', $sourceUser->user_email); 51 $params['user_email'] = "{$sourceEmailParts[0]}+{$params['username']}@{$sourceEmailParts[1]}"; 52 } 53 $params['country_acronym'] = $sourceUser->country_acronym ?? ''; 54 $params['user_ip'] = $sourceUser->user_ip; 55 $params['user_password'] = $sourceUser->user_password; 56 } 57 58 $registration = new UserRegistration($params); 59 60 try { 61 $registration->save(); 62 63 return json_item($registration->user()->fresh(), new CurrentUserTransformer()); 64 } catch (ValidationException $ex) { 65 return ModelNotSavedException::makeResponse($ex, [ 66 'user' => $registration->user(), 67 ]); 68 } 69 } 70}