22
33namespace App \Http \Controllers ;
44
5+ use App \Helper \ProfileValidator ;
56use App \Jobs \KubernetesIngressCreate ;
67use App \Jobs \MediawikiInit ;
78use App \Jobs \ProvisionQueryserviceNamespaceJob ;
1314use App \WikiDb ;
1415use App \WikiDomain ;
1516use App \WikiManager ;
17+ use App \WikiProfile ;
1618use App \WikiSetting ;
1719use Illuminate \Http \Request ;
1820use Illuminate \Support \Facades \App ;
1921use Illuminate \Support \Facades \DB ;
22+ use Illuminate \Support \Facades \Validator ;
2023use Illuminate \Support \Str ;
2124use Illuminate \Support \Facades \Config ;
2225use App \Helper \DomainValidator ;
2528class WikiController extends Controller
2629{
2730 private $ domainValidator ;
31+ private $ profileValidator ;
2832
29- public function __construct ( DomainValidator $ domainValidator )
33+ public function __construct ( DomainValidator $ domainValidator, ProfileValidator $ profileValidator )
3034 {
35+ $ this ->profileValidator = $ profileValidator ;
3136 $ this ->domainValidator = $ domainValidator ;
3237 }
3338
@@ -42,28 +47,35 @@ public function create(Request $request): \Illuminate\Http\Response
4247 abort (503 , 'Search enabled, but its configuration is invalid ' );
4348 }
4449 }
45-
4650 $ user = $ request ->user ();
4751
4852 $ submittedDomain = strtolower ($ request ->input ('domain ' ));
4953 $ submittedDomain = DomainHelper::encode ($ submittedDomain );
5054
51- $ validator = $ this ->domainValidator ->validate ( $ submittedDomain );
55+ $ domainValidator = $ this ->domainValidator ->validate ( $ submittedDomain );
5256 $ isSubdomain = $ this ->isSubDomain ($ submittedDomain );
5357
54- $ validator ->validateWithBag ('post ' );
58+ $ domainValidator ->validateWithBag ('post ' );
5559
5660 // TODO extra validation that username is correct?
5761 $ request ->validate ([
5862 'sitename ' => 'required|min:3 ' ,
5963 'username ' => 'required ' ,
64+ 'profile ' => 'nullable|json ' ,
6065 ]);
61-
66+
67+ $ rawProfile = false ;
68+ if ($ request ->filled ('profile ' ) ) {
69+ $ rawProfile = json_decode ($ request ->input ('profile ' ), true );
70+ $ profileValidator = $ this ->profileValidator ->validate ($ rawProfile );
71+ $ profileValidator ->validateWithBag ('post ' );
72+ }
73+
6274 $ wiki = null ;
6375 $ dbAssignment = null ;
6476
6577 // TODO create with some sort of owner etc?
66- DB ::transaction (function () use ($ user , $ request , &$ wiki , &$ dbAssignment , $ isSubdomain , $ submittedDomain ) {
78+ DB ::transaction (function () use ($ user , $ request , &$ wiki , &$ dbAssignment , $ isSubdomain , $ submittedDomain, $ rawProfile ) {
6779 $ dbVersion = Config::get ('wbstack.wiki_db_use_version ' );
6880 $ wikiDbCondition = ['wiki_id ' =>null , 'version ' =>$ dbVersion ];
6981
@@ -123,6 +135,12 @@ public function create(Request $request): \Illuminate\Http\Response
123135 'user_id ' => $ user ->id ,
124136 'wiki_id ' => $ wiki ->id ,
125137 ]);
138+
139+ // Create WikiProfile
140+ if ($ rawProfile ) {
141+ WikiProfile::create ([ 'wiki_id ' => $ wiki ->id , ...$ rawProfile ] );
142+ }
143+
126144
127145 // TODO maybe always make these run in a certain order..?
128146 dispatch (new MediawikiInit ($ wiki ->domain , $ request ->input ('username ' ), $ user ->email ));
0 commit comments