Implementation of QContext everywhere, instead of passing QInstance and QSession in all ActionInputs

This commit is contained in:
2023-01-15 19:30:57 -06:00
parent 69a6104393
commit d3fa1df56f
219 changed files with 1955 additions and 1581 deletions

View File

@ -53,6 +53,7 @@ import com.kingsrook.qqq.backend.core.actions.tables.QueryAction;
import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction;
import com.kingsrook.qqq.backend.core.actions.values.SearchPossibleValueSourceAction;
import com.kingsrook.qqq.backend.core.adapters.QInstanceAdapter;
import com.kingsrook.qqq.backend.core.context.QContext;
import com.kingsrook.qqq.backend.core.exceptions.QAuthenticationException;
import com.kingsrook.qqq.backend.core.exceptions.QInstanceValidationException;
import com.kingsrook.qqq.backend.core.exceptions.QModuleDispatchException;
@ -190,6 +191,17 @@ public class QJavalinImplementation
service.routes(getRoutes());
service.before(QJavalinImplementation::hotSwapQInstance);
service.before((Context context) -> context.header("Content-Type", "application/json"));
service.after(QJavalinImplementation::clearQContext);
}
/*******************************************************************************
**
*******************************************************************************/
public static void clearQContext(Context context)
{
QContext.clear();
}
@ -336,7 +348,7 @@ public class QJavalinImplementation
public static void setupSession(Context context, AbstractActionInput input) throws QModuleDispatchException, QAuthenticationException
{
QAuthenticationModuleDispatcher qAuthenticationModuleDispatcher = new QAuthenticationModuleDispatcher();
QAuthenticationModuleInterface authenticationModule = qAuthenticationModuleDispatcher.getQModule(input.getAuthenticationMetaData());
QAuthenticationModuleInterface authenticationModule = qAuthenticationModuleDispatcher.getQModule(qInstance.getAuthentication());
try
{
@ -374,8 +386,9 @@ public class QJavalinImplementation
}
}
QContext.init(qInstance, null); // hmm...
QSession session = authenticationModule.createSession(qInstance, authenticationContext);
input.setSession(session);
QContext.init(qInstance, session, null, input);
/////////////////////////////////////////////////////////////////////////////////
// if we got a session id cookie in, then send it back with updated cookie age //
@ -463,7 +476,7 @@ public class QJavalinImplementation
List<Serializable> primaryKeys = new ArrayList<>();
primaryKeys.add(context.pathParam("primaryKey"));
DeleteInput deleteInput = new DeleteInput(qInstance);
DeleteInput deleteInput = new DeleteInput();
setupSession(context, deleteInput);
deleteInput.setTableName(table);
deleteInput.setPrimaryKeys(primaryKeys);
@ -492,7 +505,7 @@ public class QJavalinImplementation
{
String table = context.pathParam("table");
UpdateInput updateInput = new UpdateInput(qInstance);
UpdateInput updateInput = new UpdateInput();
setupSession(context, updateInput);
updateInput.setTableName(table);
@ -550,7 +563,7 @@ public class QJavalinImplementation
try
{
String table = context.pathParam("table");
InsertInput insertInput = new InsertInput(qInstance);
InsertInput insertInput = new InsertInput();
setupSession(context, insertInput);
insertInput.setTableName(table);
@ -599,7 +612,7 @@ public class QJavalinImplementation
String tableName = context.pathParam("table");
QTableMetaData table = qInstance.getTable(tableName);
String primaryKey = context.pathParam("primaryKey");
GetInput getInput = new GetInput(qInstance);
GetInput getInput = new GetInput();
setupSession(context, getInput);
getInput.setTableName(tableName);
@ -651,7 +664,7 @@ public class QJavalinImplementation
{
try
{
CountInput countInput = new CountInput(qInstance);
CountInput countInput = new CountInput();
setupSession(context, countInput);
countInput.setTableName(context.pathParam("table"));
@ -698,7 +711,7 @@ public class QJavalinImplementation
{
try
{
QueryInput queryInput = new QueryInput(qInstance);
QueryInput queryInput = new QueryInput();
setupSession(context, queryInput);
queryInput.setTableName(context.pathParam("table"));
queryInput.setShouldGenerateDisplayValues(true);
@ -738,7 +751,7 @@ public class QJavalinImplementation
{
try
{
MetaDataInput metaDataInput = new MetaDataInput(qInstance);
MetaDataInput metaDataInput = new MetaDataInput();
setupSession(context, metaDataInput);
MetaDataAction metaDataAction = new MetaDataAction();
MetaDataOutput metaDataOutput = metaDataAction.execute(metaDataInput);
@ -760,7 +773,7 @@ public class QJavalinImplementation
{
try
{
TableMetaDataInput tableMetaDataInput = new TableMetaDataInput(qInstance);
TableMetaDataInput tableMetaDataInput = new TableMetaDataInput();
setupSession(context, tableMetaDataInput);
String tableName = context.pathParam("table");
@ -798,7 +811,7 @@ public class QJavalinImplementation
{
try
{
ProcessMetaDataInput processMetaDataInput = new ProcessMetaDataInput(qInstance);
ProcessMetaDataInput processMetaDataInput = new ProcessMetaDataInput();
setupSession(context, processMetaDataInput);
String processName = context.pathParam("processName");
@ -830,11 +843,10 @@ public class QJavalinImplementation
{
try
{
InsertInput insertInput = new InsertInput(qInstance);
InsertInput insertInput = new InsertInput();
setupSession(context, insertInput);
RenderWidgetInput input = new RenderWidgetInput(qInstance)
.withSession(insertInput.getSession())
RenderWidgetInput input = new RenderWidgetInput()
.withWidgetMetaData(qInstance.getWidget(context.pathParam("name")));
// todo permission?
@ -910,7 +922,7 @@ public class QJavalinImplementation
/////////////////////////////////////////////
// set up the report action's input object //
/////////////////////////////////////////////
ExportInput exportInput = new ExportInput(qInstance);
ExportInput exportInput = new ExportInput();
setupSession(context, exportInput);
exportInput.setTableName(tableName);
exportInput.setReportFormat(reportFormat);
@ -1137,7 +1149,7 @@ public class QJavalinImplementation
throw (new QNotFoundException("Field " + fieldName + " in table " + tableName + " is not associated with a possible value source."));
}
SearchPossibleValueSourceInput input = new SearchPossibleValueSourceInput(qInstance);
SearchPossibleValueSourceInput input = new SearchPossibleValueSourceInput();
setupSession(context, input);
input.setPossibleValueSourceName(field.getPossibleValueSourceName());
input.setSearchTerm(searchTerm);

View File

@ -186,7 +186,7 @@ public class QJavalinProcessHandler
/////////////////////////////////////////////
// set up the report action's input object //
/////////////////////////////////////////////
ReportInput reportInput = new ReportInput(QJavalinImplementation.qInstance);
ReportInput reportInput = new ReportInput();
QJavalinImplementation.setupSession(context, reportInput);
PermissionsHelper.checkReportPermissionThrowing(reportInput, reportName);
@ -296,7 +296,7 @@ public class QJavalinProcessHandler
LOG.info(startAfterStep == null ? "Initiating process [" + processName + "] [" + processUUID + "]"
: "Resuming process [" + processName + "] [" + processUUID + "] after step [" + startAfterStep + "]");
RunProcessInput runProcessInput = new RunProcessInput(QJavalinImplementation.qInstance);
RunProcessInput runProcessInput = new RunProcessInput();
QJavalinImplementation.setupSession(context, runProcessInput);
runProcessInput.setProcessName(processName);
@ -484,8 +484,7 @@ public class QJavalinProcessHandler
+ File.separator + runProcessInput.getProcessName()
+ File.separator + qUploadedFile.getFilename();
InsertInput insertInput = new InsertInput(QJavalinImplementation.qInstance);
insertInput.setSession(runProcessInput.getSession());
InsertInput insertInput = new InsertInput();
insertInput.setTableName(QJavalinImplementation.javalinMetaData.getUploadedFileArchiveTableName());
insertInput.setRecords(List.of(new QRecord()
.withValue("fileName", fileName)
@ -569,7 +568,7 @@ public class QJavalinProcessHandler
try
{
AbstractActionInput input = new AbstractActionInput(QJavalinImplementation.qInstance);
AbstractActionInput input = new AbstractActionInput();
QJavalinImplementation.setupSession(context, input);
// todo... get process values? PermissionsHelper.checkProcessPermissionThrowing(input, context.pathParam("processName"));
@ -638,7 +637,7 @@ public class QJavalinProcessHandler
{
try
{
AbstractActionInput input = new AbstractActionInput(QJavalinImplementation.qInstance);
AbstractActionInput input = new AbstractActionInput();
QJavalinImplementation.setupSession(context, input);
// todo - need process values? PermissionsHelper.checkProcessPermissionThrowing(input, context.pathParam("processName"));

View File

@ -97,7 +97,7 @@ public class QJavalinScriptsHandler
String tableName = context.pathParam("table");
QTableMetaData table = QJavalinImplementation.qInstance.getTable(tableName);
String primaryKey = context.pathParam("primaryKey");
GetInput getInput = new GetInput(QJavalinImplementation.qInstance);
GetInput getInput = new GetInput();
QJavalinImplementation.setupSession(context, getInput);
getInput.setTableName(tableName);
@ -150,7 +150,7 @@ public class QJavalinScriptsHandler
Serializable scriptId = record.getValue(fieldName);
if(scriptId != null)
{
GetInput getScriptInput = new GetInput(QJavalinImplementation.qInstance);
GetInput getScriptInput = new GetInput();
QJavalinImplementation.setupSession(context, getScriptInput);
getScriptInput.setTableName("script");
getScriptInput.setPrimaryKey(scriptId);
@ -159,7 +159,7 @@ public class QJavalinScriptsHandler
{
thisScriptData.put("script", getScriptOutput.getRecord());
QueryInput queryInput = new QueryInput(QJavalinImplementation.qInstance);
QueryInput queryInput = new QueryInput();
QJavalinImplementation.setupSession(context, queryInput);
queryInput.setTableName("scriptRevision");
queryInput.setFilter(new QQueryFilter()
@ -227,7 +227,7 @@ public class QJavalinScriptsHandler
String scriptRevisionId = context.pathParam("scriptRevisionId");
QueryInput queryInput = new QueryInput(QJavalinImplementation.qInstance);
QueryInput queryInput = new QueryInput();
QJavalinImplementation.setupSession(context, queryInput);
queryInput.setTableName("scriptLog");
queryInput.setFilter(new QQueryFilter()
@ -265,7 +265,7 @@ public class QJavalinScriptsHandler
/////////////////////////////////////////////////////////////////////////////////
String tableName = context.pathParam("table");
QTableMetaData table = QJavalinImplementation.qInstance.getTable(tableName);
GetInput getInput = new GetInput(QJavalinImplementation.qInstance);
GetInput getInput = new GetInput();
getInput.setTableName(tableName);
QJavalinImplementation.setupSession(context, getInput);
PermissionsHelper.checkTablePermissionThrowing(getInput, TablePermissionSubType.READ);
@ -298,7 +298,7 @@ public class QJavalinScriptsHandler
try
{
StoreAssociatedScriptInput input = new StoreAssociatedScriptInput(QJavalinImplementation.qInstance);
StoreAssociatedScriptInput input = new StoreAssociatedScriptInput();
QJavalinImplementation.setupSession(context, input);
input.setCode(context.formParam("contents"));
@ -335,7 +335,7 @@ public class QJavalinScriptsHandler
{
getReferencedRecordToEnsureAccess(context);
TestScriptInput input = new TestScriptInput(QJavalinImplementation.qInstance);
TestScriptInput input = new TestScriptInput();
QJavalinImplementation.setupSession(context, input);
// todo delete? input.setRecordPrimaryKey(context.pathParam("primaryKey"));

View File

@ -26,10 +26,12 @@ import java.time.ZonedDateTime;
import java.util.Base64;
import java.util.List;
import java.util.concurrent.TimeUnit;
import com.kingsrook.qqq.backend.core.context.QContext;
import com.kingsrook.qqq.backend.core.exceptions.QInstanceValidationException;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
import com.kingsrook.qqq.backend.core.model.metadata.authentication.TableBasedAuthenticationMetaData;
import com.kingsrook.qqq.backend.core.model.session.QSession;
import com.kingsrook.qqq.backend.core.modules.authentication.implementations.TableBasedAuthenticationModule;
import com.kingsrook.qqq.backend.core.utils.JsonUtils;
import com.kingsrook.qqq.backend.core.utils.SleepUtils;
@ -192,6 +194,7 @@ public class QJavalinImplementationAuthenticationTest extends QJavalinTestBase
TableBasedAuthenticationMetaData tableBasedAuthenticationMetaData = new TableBasedAuthenticationMetaData();
qInstance.addTable(tableBasedAuthenticationMetaData.defineStandardUserTable(TestUtils.BACKEND_NAME_MEMORY));
qInstance.addTable(tableBasedAuthenticationMetaData.defineStandardSessionTable(TestUtils.BACKEND_NAME_MEMORY));
QContext.init(qInstance, new QSession());
try
{
@ -202,7 +205,7 @@ public class QJavalinImplementationAuthenticationTest extends QJavalinTestBase
}
catch(Exception e)
{
fail("Error inserting test user.");
fail("Error inserting test user.", e);
}
qInstance.setAuthentication(tableBasedAuthenticationMetaData);

View File

@ -26,6 +26,7 @@ import java.util.List;
import com.kingsrook.qqq.backend.core.actions.tables.InsertAction;
import com.kingsrook.qqq.backend.core.actions.tables.QueryAction;
import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction;
import com.kingsrook.qqq.backend.core.context.QContext;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput;
import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator;
@ -40,6 +41,8 @@ import com.kingsrook.qqq.backend.core.utils.JsonUtils;
import kong.unirest.HttpResponse;
import kong.unirest.Unirest;
import org.json.JSONObject;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -50,6 +53,25 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
*******************************************************************************/
class QJavalinScriptsHandlerTest extends QJavalinTestBase
{
@BeforeEach
public void beforeEach() throws Exception
{
QContext.init(TestUtils.defineInstance(), new QSession());
super.beforeEach();
}
/*******************************************************************************
**
*******************************************************************************/
@AfterEach
void afterEach()
{
QContext.clear();
}
/*******************************************************************************
**
@ -57,14 +79,12 @@ class QJavalinScriptsHandlerTest extends QJavalinTestBase
@Test
void testGetRecordDeveloperMode() throws QException
{
UpdateInput updateInput = new UpdateInput(TestUtils.defineInstance());
updateInput.setSession(new QSession());
UpdateInput updateInput = new UpdateInput();
updateInput.setTableName("person");
updateInput.setRecords(List.of(new QRecord().withValue("id", 1).withValue("testScriptId", 47)));
new UpdateAction().execute(updateInput);
InsertInput insertInput = new InsertInput(TestUtils.defineInstance());
insertInput.setSession(new QSession());
InsertInput insertInput = new InsertInput();
insertInput.setTableName("script");
insertInput.setRecords(List.of(new QRecord().withValue("id", 47).withValue("currentScriptRevisionId", 100)));
new InsertAction().execute(insertInput);
@ -99,8 +119,7 @@ class QJavalinScriptsHandlerTest extends QJavalinTestBase
@Test
void testStoreRecordAssociatedScript() throws QException
{
InsertInput insertInput = new InsertInput(TestUtils.defineInstance());
insertInput.setSession(new QSession());
InsertInput insertInput = new InsertInput();
insertInput.setTableName("scriptType");
insertInput.setRecords(List.of(new QRecord().withValue("id", 1).withValue("name", "Test")));
new InsertAction().execute(insertInput);
@ -110,8 +129,7 @@ class QJavalinScriptsHandlerTest extends QJavalinTestBase
.field("commitMessage", "Javalin Commit")
.asString();
QueryInput queryInput = new QueryInput(TestUtils.defineInstance());
queryInput.setSession(new QSession());
QueryInput queryInput = new QueryInput();
queryInput.setTableName("scriptRevision");
queryInput.setFilter(new QQueryFilter()
.withCriteria(new QFilterCriteria("contents", QCriteriaOperator.EQUALS, List.of("var j = 0;")))
@ -129,8 +147,7 @@ class QJavalinScriptsHandlerTest extends QJavalinTestBase
@Test
void testTestAssociatedScript() throws QException
{
InsertInput insertInput = new InsertInput(TestUtils.defineInstance());
insertInput.setSession(new QSession());
InsertInput insertInput = new InsertInput();
insertInput.setTableName("scriptType");
insertInput.setRecords(List.of(new QRecord().withValue("id", 1).withValue("name", "Test")));
new InsertAction().execute(insertInput);
@ -158,8 +175,7 @@ class QJavalinScriptsHandlerTest extends QJavalinTestBase
@Test
void testGetAssociatedScriptLogs() throws QException
{
InsertInput insertInput = new InsertInput(TestUtils.defineInstance());
insertInput.setSession(new QSession());
InsertInput insertInput = new InsertInput();
insertInput.setTableName("scriptLog");
insertInput.setRecords(List.of(new QRecord().withValue("id", 1).withValue("output", "testOutput").withValue("scriptRevisionId", 100)));
new InsertAction().execute(insertInput);

View File

@ -517,8 +517,7 @@ public class TestUtils
*******************************************************************************/
public static void insertRecords(QInstance qInstance, QTableMetaData table, List<QRecord> records) throws QException
{
InsertInput insertInput = new InsertInput(qInstance);
insertInput.setSession(new QSession());
InsertInput insertInput = new InsertInput();
insertInput.setTableName(table.getName());
insertInput.setRecords(records);
new InsertAction().execute(insertInput);