mirror of
				https://github.com/grocy/grocy.git
				synced 2025-11-03 20:15:04 +00:00 
			
		
		
		
	Validate all API request as the API is now open for third parties (references #5)
This commit is contained in:
		@@ -6,35 +6,75 @@ class GenericEntityApiController extends BaseApiController
 | 
			
		||||
{
 | 
			
		||||
	public function GetObjects(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
 | 
			
		||||
	{
 | 
			
		||||
		return $this->ApiResponse($this->Database->{$args['entity']}());
 | 
			
		||||
		if ($this->IsValidEntity($args['entity']))
 | 
			
		||||
		{
 | 
			
		||||
			return $this->ApiResponse($this->Database->{$args['entity']}());
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			return $this->VoidApiActionResponse($response, false, 400, 'Entity does not exist or is not exposed');
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function GetObject(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
 | 
			
		||||
	{
 | 
			
		||||
		return $this->ApiResponse($this->Database->{$args['entity']}($args['objectId']));
 | 
			
		||||
		if ($this->IsValidEntity($args['entity']))
 | 
			
		||||
		{
 | 
			
		||||
			return $this->ApiResponse($this->Database->{$args['entity']}($args['objectId']));
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			return $this->VoidApiActionResponse($response, false, 400, 'Entity does not exist or is not exposed');
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function AddObject(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
 | 
			
		||||
	{
 | 
			
		||||
		$newRow = $this->Database->{$args['entity']}()->createRow($request->getParsedBody());
 | 
			
		||||
		$newRow->save();
 | 
			
		||||
		$success = $newRow->isClean();
 | 
			
		||||
		return $this->ApiResponse(array('success' => $success));
 | 
			
		||||
		if ($this->IsValidEntity($args['entity']))
 | 
			
		||||
		{
 | 
			
		||||
			$newRow = $this->Database->{$args['entity']}()->createRow($request->getParsedBody());
 | 
			
		||||
			$newRow->save();
 | 
			
		||||
			$success = $newRow->isClean();
 | 
			
		||||
			return $this->ApiResponse(array('success' => $success));
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			return $this->VoidApiActionResponse($response, false, 400, 'Entity does not exist or is not exposed');
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function EditObject(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
 | 
			
		||||
	{
 | 
			
		||||
		$row = $this->Database->{$args['entity']}($args['objectId']);
 | 
			
		||||
		$row->update($request->getParsedBody());
 | 
			
		||||
		$success = $row->isClean();
 | 
			
		||||
		return $this->ApiResponse(array('success' => $success));
 | 
			
		||||
		if ($this->IsValidEntity($args['entity']))
 | 
			
		||||
		{
 | 
			
		||||
			$row = $this->Database->{$args['entity']}($args['objectId']);
 | 
			
		||||
			$row->update($request->getParsedBody());
 | 
			
		||||
			$success = $row->isClean();
 | 
			
		||||
			return $this->ApiResponse(array('success' => $success));
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			return $this->VoidApiActionResponse($response, false, 400, 'Entity does not exist or is not exposed');
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function DeleteObject(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args)
 | 
			
		||||
	{
 | 
			
		||||
		$row = $this->Database->{$args['entity']}($args['objectId']);
 | 
			
		||||
		$row->delete();
 | 
			
		||||
		$success = $row->isClean();
 | 
			
		||||
		return $this->ApiResponse(array('success' => $success));
 | 
			
		||||
		if ($this->IsValidEntity($args['entity']))
 | 
			
		||||
		{
 | 
			
		||||
			$row = $this->Database->{$args['entity']}($args['objectId']);
 | 
			
		||||
			$row->delete();
 | 
			
		||||
			$success = $row->isClean();
 | 
			
		||||
			return $this->ApiResponse(array('success' => $success));
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			return $this->VoidApiActionResponse($response, false, 400, 'Entity does not exist or is not exposed');
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private function IsValidEntity($entity)
 | 
			
		||||
	{
 | 
			
		||||
		return in_array($entity, $this->OpenApiSpec->components->internalSchemas->ExposedEntity->enum);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user