Merge branch 'develop' into feature/client-api
This commit is contained in:
		
						commit
						d4e331c20a
					
				| @ -3,9 +3,15 @@ This file is a running track of new features and fixes to each version of the pa | |||||||
| 
 | 
 | ||||||
| This project follows [Semantic Versioning](http://semver.org) guidelines. | This project follows [Semantic Versioning](http://semver.org) guidelines. | ||||||
| 
 | 
 | ||||||
|  | ## v0.7.4 (Derelict Dermodactylus) | ||||||
|  | ### Fixed | ||||||
|  | * Fixes a bug when reinstalling a server that would not mark the server as installing, resulting in some UI issues. | ||||||
|  | 
 | ||||||
| ## v0.7.3 (Derelict Dermodactylus) | ## v0.7.3 (Derelict Dermodactylus) | ||||||
| ### Fixed | ### Fixed | ||||||
| * Fixes server creation API endpoint not passing the provided `external_id` to the creation service. | * Fixes server creation API endpoint not passing the provided `external_id` to the creation service. | ||||||
|  | * Fixes a bug causing users to be un-editable on new installations once more than one user exists. | ||||||
|  | * Fixes default order of buttons in certain parts of the panel that would default to 'Delete' rather than 'Save' when pressing enter. | ||||||
| 
 | 
 | ||||||
| ### Added | ### Added | ||||||
| * Adds ability to modify the external ID for a server through the API. | * Adds ability to modify the external ID for a server through the API. | ||||||
|  | |||||||
| @ -121,6 +121,7 @@ class User extends Model implements | |||||||
|      * @var array |      * @var array | ||||||
|      */ |      */ | ||||||
|     protected $attributes = [ |     protected $attributes = [ | ||||||
|  |         'external_id' => null, | ||||||
|         'root_admin' => false, |         'root_admin' => false, | ||||||
|         'language' => 'en', |         'language' => 'en', | ||||||
|         'use_totp' => false, |         'use_totp' => false, | ||||||
|  | |||||||
| @ -66,7 +66,7 @@ class ReinstallServerService | |||||||
|         $this->database->beginTransaction(); |         $this->database->beginTransaction(); | ||||||
|         $this->repository->withoutFreshModel()->update($server->id, [ |         $this->repository->withoutFreshModel()->update($server->id, [ | ||||||
|             'installed' => 0, |             'installed' => 0, | ||||||
|         ]); |         ], true, true); | ||||||
| 
 | 
 | ||||||
|         try { |         try { | ||||||
|             $this->daemonServerRepository->setServer($server)->reinstall(); |             $this->daemonServerRepository->setServer($server)->reinstall(); | ||||||
|  | |||||||
| @ -0,0 +1,38 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | use Illuminate\Support\Facades\DB; | ||||||
|  | use Illuminate\Support\Facades\Schema; | ||||||
|  | use Illuminate\Database\Schema\Blueprint; | ||||||
|  | use Illuminate\Database\Migrations\Migration; | ||||||
|  | 
 | ||||||
|  | class RemoveDefaultNullValueOnTable extends Migration | ||||||
|  | { | ||||||
|  |     /** | ||||||
|  |      * Run the migrations. | ||||||
|  |      * | ||||||
|  |      * @throws \Exception | ||||||
|  |      * @throws \Throwable | ||||||
|  |      */ | ||||||
|  |     public function up() | ||||||
|  |     { | ||||||
|  |         Schema::table('users', function (Blueprint $table) { | ||||||
|  |             $table->string('external_id')->default(null)->change(); | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         DB::transaction(function () { | ||||||
|  |             DB::table('users')->where('external_id', '=', 'NULL')->update([ | ||||||
|  |                 'external_id' => null, | ||||||
|  |             ]); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Reverse the migrations. | ||||||
|  |      * | ||||||
|  |      * @return void | ||||||
|  |      */ | ||||||
|  |     public function down() | ||||||
|  |     { | ||||||
|  |         // This should not be rolled back.
 | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,32 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | use Illuminate\Support\Facades\Schema; | ||||||
|  | use Illuminate\Database\Schema\Blueprint; | ||||||
|  | use Illuminate\Database\Migrations\Migration; | ||||||
|  | 
 | ||||||
|  | class DefineUniqueIndexOnUsersExternalId extends Migration | ||||||
|  | { | ||||||
|  |     /** | ||||||
|  |      * Run the migrations. | ||||||
|  |      * | ||||||
|  |      * @return void | ||||||
|  |      */ | ||||||
|  |     public function up() | ||||||
|  |     { | ||||||
|  |         Schema::table('users', function (Blueprint $table) { | ||||||
|  |             $table->index(['external_id']); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Reverse the migrations. | ||||||
|  |      * | ||||||
|  |      * @return void | ||||||
|  |      */ | ||||||
|  |     public function down() | ||||||
|  |     { | ||||||
|  |         Schema::table('users', function (Blueprint $table) { | ||||||
|  |             $table->dropIndex(['external_id']); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -79,8 +79,8 @@ | |||||||
|                 </div> |                 </div> | ||||||
|                 <div class="box-footer"> |                 <div class="box-footer"> | ||||||
|                     {!! csrf_field() !!} |                     {!! csrf_field() !!} | ||||||
|                     <button name="_method" value="DELETE" class="btn btn-sm btn-danger pull-left muted muted-hover"><i class="fa fa-trash-o"></i></button> |  | ||||||
|                     <button name="_method" value="PATCH" class="btn btn-sm btn-primary pull-right">Save</button> |                     <button name="_method" value="PATCH" class="btn btn-sm btn-primary pull-right">Save</button> | ||||||
|  |                     <button name="_method" value="DELETE" class="btn btn-sm btn-danger pull-left muted muted-hover"><i class="fa fa-trash-o"></i></button> | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|  | |||||||
| @ -86,8 +86,8 @@ | |||||||
|                     </div> |                     </div> | ||||||
|                     <div class="box-footer"> |                     <div class="box-footer"> | ||||||
|                         {!! csrf_field() !!} |                         {!! csrf_field() !!} | ||||||
|                         <button class="btn btn-sm btn-danger pull-left muted muted-hover" data-action="delete" name="_method" value="DELETE" type="submit"><i class="fa fa-trash-o"></i></button> |  | ||||||
|                         <button class="btn btn-sm btn-primary pull-right" name="_method" value="PATCH" type="submit">Save</button> |                         <button class="btn btn-sm btn-primary pull-right" name="_method" value="PATCH" type="submit">Save</button> | ||||||
|  |                         <button class="btn btn-sm btn-danger pull-left muted muted-hover" data-action="delete" name="_method" value="DELETE" type="submit"><i class="fa fa-trash-o"></i></button> | ||||||
|                     </div> |                     </div> | ||||||
|                 </form> |                 </form> | ||||||
|             </div> |             </div> | ||||||
|  | |||||||
| @ -31,7 +31,7 @@ | |||||||
|         </div> |         </div> | ||||||
|     </div> |     </div> | ||||||
|     <div class="col-xs-12"> |     <div class="col-xs-12"> | ||||||
|         <div class="callout callout-info"> |         <div class="alert alert-info"> | ||||||
|             <strong>Notice:</strong> Editing an Egg or any of the Process Management fields <em>requires</em> that each Daemon be rebooted in order to apply the changes. |             <strong>Notice:</strong> Editing an Egg or any of the Process Management fields <em>requires</em> that each Daemon be rebooted in order to apply the changes. | ||||||
|         </div> |         </div> | ||||||
|     </div> |     </div> | ||||||
| @ -159,14 +159,19 @@ | |||||||
|                 </div> |                 </div> | ||||||
|                 <div class="box-footer"> |                 <div class="box-footer"> | ||||||
|                     {!! csrf_field() !!} |                     {!! csrf_field() !!} | ||||||
|  |                     <button type="submit" name="_method" value="PATCH" class="btn btn-primary btn-sm pull-right">Save</button> | ||||||
|  |                     <a href="{{ route('admin.nests.egg.export', ['option' => $egg->id]) }}" class="btn btn-sm btn-info pull-right" style="margin-right:10px;">Export</a> | ||||||
|                     <button id="deleteButton" type="submit" name="_method" value="DELETE" class="btn btn-danger btn-sm muted muted-hover"> |                     <button id="deleteButton" type="submit" name="_method" value="DELETE" class="btn btn-danger btn-sm muted muted-hover"> | ||||||
|                         <i class="fa fa-trash-o"></i> |                         <i class="fa fa-trash-o"></i> | ||||||
|                     </button> |                     </button> | ||||||
|                     <button type="submit" name="_method" value="PATCH" class="btn btn-primary btn-sm pull-right">Save</button> |  | ||||||
|                     <a href="{{ route('admin.nests.egg.export', ['option' => $egg->id]) }}" class="btn btn-sm btn-info pull-right" style="margin-right:10px;">Export</a> |  | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|  |         <div class="col-xs-12"> | ||||||
|  |             <div class="alert alert-info"> | ||||||
|  |                 <strong>Notice:</strong> Editing an Egg or any of the Process Management fields <em>requires</em> that each Daemon be rebooted in order to apply the changes. | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|     </div> |     </div> | ||||||
| </form> | </form> | ||||||
| @endsection | @endsection | ||||||
|  | |||||||
| @ -39,8 +39,8 @@ | |||||||
|                 <div class="box-footer"> |                 <div class="box-footer"> | ||||||
|                     {!! csrf_field() !!} |                     {!! csrf_field() !!} | ||||||
|                     {!! method_field('PATCH') !!} |                     {!! method_field('PATCH') !!} | ||||||
|                     <button name="action" value="delete" class="btn btn-sm btn-danger pull-left muted muted-hover"><i class="fa fa-trash-o"></i></button> |  | ||||||
|                     <button name="action" value="edit" class="btn btn-sm btn-primary pull-right">Save</button> |                     <button name="action" value="edit" class="btn btn-sm btn-primary pull-right">Save</button> | ||||||
|  |                     <button name="action" value="delete" class="btn btn-sm btn-danger pull-left muted muted-hover"><i class="fa fa-trash-o"></i></button> | ||||||
|                 </div> |                 </div> | ||||||
|             </form> |             </form> | ||||||
|         </div> |         </div> | ||||||
|  | |||||||
| @ -38,8 +38,8 @@ | |||||||
|                 </div> |                 </div> | ||||||
|                 <div class="modal-footer"> |                 <div class="modal-footer"> | ||||||
|                     {!! csrf_field() !!} |                     {!! csrf_field() !!} | ||||||
|                     <button type="button" class="btn btn-default btn-sm pull-left" data-dismiss="modal">Cancel</button> |  | ||||||
|                     <button type="submit" name="action" value="from_template" class="btn btn-primary btn-sm">Install</button> |                     <button type="submit" name="action" value="from_template" class="btn btn-primary btn-sm">Install</button> | ||||||
|  |                     <button type="button" class="btn btn-default btn-sm pull-left" data-dismiss="modal">Cancel</button> | ||||||
|                 </div> |                 </div> | ||||||
|             </form> |             </form> | ||||||
|         </div> |         </div> | ||||||
|  | |||||||
| @ -98,8 +98,8 @@ | |||||||
|                 </div> |                 </div> | ||||||
|                 <div class="box-footer with-border"> |                 <div class="box-footer with-border"> | ||||||
|                     {!! csrf_field() !!} |                     {!! csrf_field() !!} | ||||||
|                     <button name="_method" value="DELETE" class="btn btn-sm btn-danger pull-left muted muted-hover" type="submit"><i class="fa fa-trash-o"></i></button> |  | ||||||
|                     <button name="_method" value="PATCH" class="btn btn-sm btn-primary pull-right" type="submit">Save</button> |                     <button name="_method" value="PATCH" class="btn btn-sm btn-primary pull-right" type="submit">Save</button> | ||||||
|  |                     <button name="_method" value="DELETE" class="btn btn-sm btn-danger pull-left muted muted-hover" type="submit"><i class="fa fa-trash-o"></i></button> | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|  | |||||||
| @ -122,14 +122,14 @@ | |||||||
|                     <div> |                     <div> | ||||||
|                         <p class="text-muted small">@lang('server.schedule.task_help')</p> |                         <p class="text-muted small">@lang('server.schedule.task_help')</p> | ||||||
|                     </div> |                     </div> | ||||||
|                     <div class="pull-left"> |  | ||||||
|                         <button type="submit" class="btn btn-sm btn-danger muted muted-hover" id="deleteButton" name="_method" value="DELETE"><i class="fa fa-trash-o"></i></button> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="pull-right"> |                     <div class="pull-right"> | ||||||
|                         {!! csrf_field() !!} |                         {!! csrf_field() !!} | ||||||
|                         <button type="button" class="btn btn-sm btn-default" data-action="add-new-task"><i class="fa fa-plus"></i> @lang('server.schedule.task.add_more')</button> |                         <button type="button" class="btn btn-sm btn-default" data-action="add-new-task"><i class="fa fa-plus"></i> @lang('server.schedule.task.add_more')</button> | ||||||
|                         <button type="submit" class="btn btn-sm btn-success" name="_method" value="PATCH">@lang('server.schedule.manage.submit')</button> |                         <button type="submit" class="btn btn-sm btn-success" name="_method" value="PATCH">@lang('server.schedule.manage.submit')</button> | ||||||
|                     </div> |                     </div> | ||||||
|  |                     <div class="pull-left"> | ||||||
|  |                         <button type="submit" class="btn btn-sm btn-danger muted muted-hover" id="deleteButton" name="_method" value="DELETE"><i class="fa fa-trash-o"></i></button> | ||||||
|  |                     </div> | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|  | |||||||
| @ -81,10 +81,9 @@ class ReinstallServerServiceTest extends TestCase | |||||||
|         $this->repository->shouldNotReceive('find'); |         $this->repository->shouldNotReceive('find'); | ||||||
| 
 | 
 | ||||||
|         $this->database->shouldReceive('beginTransaction')->withNoArgs()->once()->andReturnNull(); |         $this->database->shouldReceive('beginTransaction')->withNoArgs()->once()->andReturnNull(); | ||||||
|         $this->repository->shouldReceive('withoutFreshModel')->withNoArgs()->once()->andReturnSelf() |         $this->repository->shouldReceive('withoutFreshModel->update')->with($this->server->id, [ | ||||||
|             ->shouldReceive('update')->with($this->server->id, [ |             'installed' => 0, | ||||||
|                 'installed' => 0, |         ], true, true)->once()->andReturnNull(); | ||||||
|             ])->once()->andReturnNull(); |  | ||||||
| 
 | 
 | ||||||
|         $this->daemonServerRepository->shouldReceive('setServer')->with($this->server)->once()->andReturnSelf() |         $this->daemonServerRepository->shouldReceive('setServer')->with($this->server)->once()->andReturnSelf() | ||||||
|             ->shouldReceive('reinstall')->withNoArgs()->once()->andReturn(new Response); |             ->shouldReceive('reinstall')->withNoArgs()->once()->andReturn(new Response); | ||||||
| @ -101,10 +100,9 @@ class ReinstallServerServiceTest extends TestCase | |||||||
|         $this->repository->shouldReceive('find')->with($this->server->id)->once()->andReturn($this->server); |         $this->repository->shouldReceive('find')->with($this->server->id)->once()->andReturn($this->server); | ||||||
| 
 | 
 | ||||||
|         $this->database->shouldReceive('beginTransaction')->withNoArgs()->once()->andReturnNull(); |         $this->database->shouldReceive('beginTransaction')->withNoArgs()->once()->andReturnNull(); | ||||||
|         $this->repository->shouldReceive('withoutFreshModel')->withNoArgs()->once()->andReturnSelf() |         $this->repository->shouldReceive('withoutFreshModel->update')->with($this->server->id, [ | ||||||
|             ->shouldReceive('update')->with($this->server->id, [ |             'installed' => 0, | ||||||
|                 'installed' => 0, |         ], true, true)->once()->andReturnNull(); | ||||||
|             ])->once()->andReturnNull(); |  | ||||||
| 
 | 
 | ||||||
|         $this->daemonServerRepository->shouldReceive('setServer')->with($this->server)->once()->andReturnSelf() |         $this->daemonServerRepository->shouldReceive('setServer')->with($this->server)->once()->andReturnSelf() | ||||||
|             ->shouldReceive('reinstall')->withNoArgs()->once()->andReturn(new Response); |             ->shouldReceive('reinstall')->withNoArgs()->once()->andReturn(new Response); | ||||||
| @ -121,10 +119,9 @@ class ReinstallServerServiceTest extends TestCase | |||||||
|     public function testExceptionThrownByGuzzleShouldBeReRenderedAsDisplayable() |     public function testExceptionThrownByGuzzleShouldBeReRenderedAsDisplayable() | ||||||
|     { |     { | ||||||
|         $this->database->shouldReceive('beginTransaction')->withNoArgs()->once()->andReturnNull(); |         $this->database->shouldReceive('beginTransaction')->withNoArgs()->once()->andReturnNull(); | ||||||
|         $this->repository->shouldReceive('withoutFreshModel')->withNoArgs()->once()->andReturnSelf() |         $this->repository->shouldReceive('withoutFreshModel->update')->with($this->server->id, [ | ||||||
|             ->shouldReceive('update')->with($this->server->id, [ |             'installed' => 0, | ||||||
|                 'installed' => 0, |         ], true, true)->once()->andReturnNull(); | ||||||
|             ])->once()->andReturnNull(); |  | ||||||
| 
 | 
 | ||||||
|         $this->daemonServerRepository->shouldReceive('setServer')->with($this->server)->once()->andThrow($this->exception); |         $this->daemonServerRepository->shouldReceive('setServer')->with($this->server)->once()->andThrow($this->exception); | ||||||
| 
 | 
 | ||||||
| @ -139,10 +136,9 @@ class ReinstallServerServiceTest extends TestCase | |||||||
|     public function testExceptionNotThrownByGuzzleShouldNotBeTransformedToDisplayable() |     public function testExceptionNotThrownByGuzzleShouldNotBeTransformedToDisplayable() | ||||||
|     { |     { | ||||||
|         $this->database->shouldReceive('beginTransaction')->withNoArgs()->once()->andReturnNull(); |         $this->database->shouldReceive('beginTransaction')->withNoArgs()->once()->andReturnNull(); | ||||||
|         $this->repository->shouldReceive('withoutFreshModel')->withNoArgs()->once()->andReturnSelf() |         $this->repository->shouldReceive('withoutFreshModel->update')->with($this->server->id, [ | ||||||
|             ->shouldReceive('update')->with($this->server->id, [ |             'installed' => 0, | ||||||
|                 'installed' => 0, |         ], true, true)->once()->andReturnNull(); | ||||||
|             ])->once()->andReturnNull(); |  | ||||||
| 
 | 
 | ||||||
|         $this->daemonServerRepository->shouldReceive('setServer')->with($this->server)->once()->andThrow(new Exception()); |         $this->daemonServerRepository->shouldReceive('setServer')->with($this->server)->once()->andThrow(new Exception()); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dane Everitt
						Dane Everitt