Add 'RedirectState' table (used by oauth2 login flow); change userSession table from memory to rdbms backend

This commit is contained in:
2025-03-24 19:36:41 -05:00
parent a95650a0ce
commit 1c54a9a8ac
3 changed files with 48 additions and 3 deletions

View File

@ -28,6 +28,8 @@ import com.kingsrook.qqq.backend.core.model.metadata.MetaDataProducerInterface;
import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
import com.kingsrook.qqq.backend.core.model.metadata.authentication.OAuth2AuthenticationMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.authentication.QAuthenticationMetaData;
import com.kingsrook.qqq.backend.core.modules.authentication.implementations.metadata.RedirectStateMetaDataProducer;
import com.kingsrook.qqq.backend.core.modules.authentication.implementations.model.UserSession;
/*******************************************************************************
@ -49,15 +51,15 @@ public class OAuth2MetaDataProvider implements MetaDataProducerInterface<QAuthen
QMetaDataVariableInterpreter qMetaDataVariableInterpreter = new QMetaDataVariableInterpreter();
String oauth2BaseUrl = qMetaDataVariableInterpreter.interpret("${env.OAUTH2_BASE_URL}");
String oauth2TokenUrl = qMetaDataVariableInterpreter.interpret("${env.OAUTH2_TOKEN_URL}");
String oauth2ClientId = qMetaDataVariableInterpreter.interpret("${env.OAUTH2_CLIENT_ID}");
String oauth2ClientSecret = qMetaDataVariableInterpreter.interpret("${env.OAUTH2_CLIENT_SECRET}");
return (new OAuth2AuthenticationMetaData()
.withBaseUrl(oauth2BaseUrl)
.withTokenUrl(oauth2TokenUrl)
.withClientId(oauth2ClientId)
.withClientSecret(oauth2ClientSecret)
.withUserSessionTableName(UserSession.TABLE_NAME)
.withRedirectStateTableName(RedirectStateMetaDataProducer.TABLE_NAME)
.withName(NAME));
}
}

View File

@ -72,6 +72,7 @@ import com.kingsrook.qqq.backend.core.model.metadata.tables.Association;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QFieldSection;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
import com.kingsrook.qqq.backend.core.model.metadata.tables.Tier;
import com.kingsrook.qqq.backend.core.modules.authentication.implementations.metadata.RedirectStateMetaDataProducer;
import com.kingsrook.qqq.backend.core.modules.authentication.implementations.metadata.UserSessionMetaDataProducer;
import com.kingsrook.qqq.backend.core.modules.backend.implementations.memory.MemoryBackendModule;
import com.kingsrook.qqq.backend.core.processes.implementations.etl.streamedwithfrontend.ExtractViaQueryStep;
@ -86,6 +87,7 @@ import com.kingsrook.qqq.backend.module.filesystem.local.model.metadata.Filesyst
import com.kingsrook.qqq.backend.module.rdbms.jdbc.ConnectionManager;
import com.kingsrook.qqq.backend.module.rdbms.jdbc.QueryManager;
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSBackendMetaData;
import com.kingsrook.qqq.backend.module.rdbms.model.metadata.RDBMSTableBackendDetails;
import com.kingsrook.sampleapp.dashboard.widgets.PersonsByCreateDateBarChart;
import com.kingsrook.sampleapp.processes.clonepeople.ClonePeopleTransformStep;
import org.apache.commons.io.IOUtils;
@ -161,7 +163,8 @@ public class SampleMetaDataProvider extends AbstractQQQApplication
qInstance.addProcess(defineProcessScreenThenSleep());
qInstance.addProcess(defineProcessSimpleThrow());
qInstance.addTable(new UserSessionMetaDataProducer(MEMORY_BACKEND_NAME).produce(qInstance));
qInstance.addTable(setTableBackendNamesForRdbms(new UserSessionMetaDataProducer(RDBMS_BACKEND_NAME).produce(qInstance)));
qInstance.addTable(setTableBackendNamesForRdbms(new RedirectStateMetaDataProducer(RDBMS_BACKEND_NAME).produce(qInstance)));
MetaDataProducerHelper.processAllMetaDataProducersInPackage(qInstance, SampleMetaDataProvider.class.getPackageName());
@ -174,6 +177,21 @@ public class SampleMetaDataProvider extends AbstractQQQApplication
/*******************************************************************************
** if rdbms backend uses snake_case table & column names, instead of camelCase
** style used for qqq meta-data tableNames and fieldNames, then set those via
** this method.
*******************************************************************************/
private static QTableMetaData setTableBackendNamesForRdbms(QTableMetaData table)
{
table.setBackendDetails(new RDBMSTableBackendDetails()
.withTableName(QInstanceEnricher.inferBackendName(table.getName())));
QInstanceEnricher.setInferredFieldBackendNames(table);
return (table);
}
/***************************************************************************
** for tests, define the same instance as above, but use mock authentication.
***************************************************************************/

View File

@ -19,6 +19,31 @@
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
--
DROP TABLE IF EXISTS user_session;
CREATE TABLE user_session
(
id INTEGER AUTO_INCREMENT PRIMARY KEY,
create_date TIMESTAMP DEFAULT now(),
modify_date TIMESTAMP DEFAULT now(),
uuid VARCHAR(40) NOT NULL,
access_token MEDIUMTEXT,
user_id VARCHAR(100)
);
ALTER TABLE user_session ADD UNIQUE u_uuid (uuid);
ALTER TABLE user_session ADD INDEX i_user_id (user_id);
DROP TABLE IF EXISTS redirect_state;
CREATE TABLE redirect_state
(
id INTEGER AUTO_INCREMENT PRIMARY KEY,
create_date TIMESTAMP DEFAULT now(),
state VARCHAR(45) NOT NULL,
redirect_uri TEXT
);
ALTER TABLE redirect_state ADD UNIQUE u_state (state);
DROP TABLE IF EXISTS person;
CREATE TABLE person
(