diff --git a/README.MD b/README.MD index a6ea85f..d3b3d96 100644 --- a/README.MD +++ b/README.MD @@ -9,6 +9,7 @@ It handles: - ACL Cleanup - Bouncer Restart - Dev Rank Handling +- Ingame Verified Syncc - IP2ASN - Patreon Sync - Profiler Daemon Ingest @@ -27,6 +28,10 @@ Restarts our "bouncer" server every day. This is the thing that does 2FA, server Adds or removes members from development rank when changes are made. Performed hourly. +### Ingame Verified Sync + +Tacks roles onto the relevant people for their ingame verified state + ### IP2ASN Caches ASNs for IP addresses of recent players. diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java index 6c0ef6c..65e477c 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java @@ -5,16 +5,18 @@ import java.util.ArrayList; import java.util.Optional; import me.aa07.paradise.taskdaemon.core.config.ConfigHolder; -import me.aa07.paradise.taskdaemon.core.database.DbCore; import me.aa07.paradise.taskdaemon.core.modules.aclcleanup.AclCleanupJob; import me.aa07.paradise.taskdaemon.core.modules.bouncerrestart.BouncerRestartJob; import me.aa07.paradise.taskdaemon.core.modules.devrank.DevRankJob; +import me.aa07.paradise.taskdaemon.core.modules.ingameverifiedsync.IngameVerifiedSyncJob; import me.aa07.paradise.taskdaemon.core.modules.ip2asn.Ip2AsnJob; import me.aa07.paradise.taskdaemon.core.modules.patreonsync.PatreonSyncJob; import me.aa07.paradise.taskdaemon.core.modules.prlabel.PrLabelJob; import me.aa07.paradise.taskdaemon.core.modules.profilercleanup.ProfilerCleanupJob; import me.aa07.paradise.taskdaemon.core.modules.profileringest.ProfilerWorker; import me.aa07.paradise.taskdaemon.core.redis.RedisManager; +import me.aa07.paradise.taskdaemon.core.services.database.DbCore; +import me.aa07.paradise.taskdaemon.core.services.invision.InvisionUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.quartz.CronScheduleBuilder; @@ -63,6 +65,7 @@ public void run() { private void setupThreads(ConfigHolder config, Logger logger) { // Initial setup DbCore database = new DbCore(config, logger); + InvisionUtil iu = new InvisionUtil(config.invisionConfig); // Profiler stuff ProfilerWorker pw = new ProfilerWorker(database, logger); @@ -75,14 +78,14 @@ private void setupThreads(ConfigHolder config, Logger logger) { // Launch Quartz try { Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); - setupJobs(scheduler, database, config, logger); + setupJobs(scheduler, database, iu, config, logger); scheduler.start(); } catch (SchedulerException ex) { logger.error("Quartz had a hissy fit!", ex); } } - private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config, Logger logger) throws SchedulerException { + private void setupJobs(Scheduler scheduler, DbCore dbCore, InvisionUtil iu, ConfigHolder config, Logger logger) throws SchedulerException { // See below for CRON format // https://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html @@ -185,6 +188,20 @@ private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config, .withSchedule(CronScheduleBuilder.cronSchedule("0 15 * * * ?")) // Every hour, offset 15 minutes .build(); + // Ingame verified sync + JobDataMap jdm_igvsync = new JobDataMap(); + jdm_igvsync.put("LOGGER", logger); + jdm_igvsync.put("DBCORE", dbCore); + jdm_igvsync.put("IU", iu); + JobDetail jd_igvsync = JobBuilder.newJob(IngameVerifiedSyncJob.class) + .withIdentity("igvsync", "igvsync") + .usingJobData(jdm_igvsync) + .build(); + CronTrigger ct_igvsync = TriggerBuilder.newTrigger() + .withIdentity("igvsync", "igvsync") + .withSchedule(CronScheduleBuilder.cronSchedule("0 23 * * * ?")) // Every hour, offset 23 minutes + .build(); + // Lists that exist just to make sure these things show as recognised ArrayList bin1 = new ArrayList(); bin1.add(jd_aclcleanup); @@ -194,6 +211,7 @@ private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config, bin1.add(jd_profilercleanup); bin1.add(jd_pullrequests); bin1.add(jd_patreonsync); + bin1.add(jd_igvsync); ArrayList bin2 = new ArrayList(); bin2.add(ct_aclcleanup); bin2.add(ct_bouncerrestart); @@ -202,6 +220,7 @@ private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config, bin2.add(ct_profilercleanup); bin2.add(ct_pullrequests); bin2.add(ct_patreonsync); + bin2.add(ct_igvsync); // Is this necessary? Prolly not! bin1.clear(); @@ -216,6 +235,7 @@ private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config, scheduler.scheduleJob(jd_profilercleanup, ct_profilercleanup); scheduler.scheduleJob(jd_pullrequests, ct_pullrequests); scheduler.scheduleJob(jd_patreonsync, ct_patreonsync); + scheduler.scheduleJob(jd_igvsync, ct_igvsync); } private void launchAll() { diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/ConfigHolder.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/ConfigHolder.java index 9313dfe..efd52e1 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/ConfigHolder.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/ConfigHolder.java @@ -6,6 +6,7 @@ public class ConfigHolder { public DatabaseConfig forumsDatabase; public DatabaseConfig gameDatabase; public GithubConfig github; + public InvisionConfig invisionConfig; public Ip2AsnSerivceConfig ip2asn; public PatreonConfig patreon; public PfsenseConfig pfsense; diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/InvisionConfig.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/InvisionConfig.java new file mode 100644 index 0000000..41484f2 --- /dev/null +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/InvisionConfig.java @@ -0,0 +1,6 @@ +package me.aa07.paradise.taskdaemon.core.config; + +public class InvisionConfig { + public String apiBaseUrl; + public String apiKey; +} diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/models/invision/GetUserModel.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/models/invision/GetUserModel.java new file mode 100644 index 0000000..9a18859 --- /dev/null +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/models/invision/GetUserModel.java @@ -0,0 +1,24 @@ +package me.aa07.paradise.taskdaemon.core.models.invision; + +import com.google.gson.annotations.SerializedName; +import java.util.List; + +public class GetUserModel { + @SerializedName("id") // just incase GSON behaviour ever changes + public int id; + @SerializedName("name") + public String name; + @SerializedName("primaryGroup") + public GroupHolder primaryGroup; + @SerializedName("secondaryGroups") + public List secondaryGroups; + + public class GroupHolder { + @SerializedName("id") + public int id; + @SerializedName("name") + public String name; + @SerializedName("formattedName") + public String formattedName; + } +} diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/aclcleanup/AclCleanupJob.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/aclcleanup/AclCleanupJob.java index 87a1d1b..9499775 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/aclcleanup/AclCleanupJob.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/aclcleanup/AclCleanupJob.java @@ -9,12 +9,11 @@ import java.util.List; import java.util.Optional; import me.aa07.paradise.taskdaemon.core.config.PfsenseConfig; -import me.aa07.paradise.taskdaemon.core.database.DatabaseType; -import me.aa07.paradise.taskdaemon.core.database.DbCore; +import me.aa07.paradise.taskdaemon.core.services.database.DatabaseType; +import me.aa07.paradise.taskdaemon.core.services.database.DbCore; import me.aa07.paradise.taskdaemon.database.gamedb.Tables; import org.apache.logging.log4j.Logger; import org.jooq.DSLContext; -import org.jooq.SQLDialect; import org.quartz.DisallowConcurrentExecution; import org.quartz.Job; import org.quartz.JobDataMap; @@ -113,7 +112,7 @@ public void execute(JobExecutionContext context) throws JobExecutionException { public List checkIpsInDatabase(List ips, Logger logger, DbCore dbcore) { List to_remove = new ArrayList<>(); - DSLContext ctx = dbcore.jooq(DatabaseType.GameDb, SQLDialect.MYSQL); + DSLContext ctx = dbcore.jooq(DatabaseType.GameDb); LocalDateTime ten_mins_ago = dbcore.now().minusMinutes(10); for (String ip : ips) { diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/bouncerrestart/BouncerRestartJob.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/bouncerrestart/BouncerRestartJob.java index 80f6177..f7b979e 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/bouncerrestart/BouncerRestartJob.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/bouncerrestart/BouncerRestartJob.java @@ -1,6 +1,5 @@ package me.aa07.paradise.taskdaemon.core.modules.bouncerrestart; -import com.google.gson.Gson; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; @@ -11,6 +10,7 @@ import java.util.Optional; import me.aa07.paradise.taskdaemon.core.config.TgsConfig; import me.aa07.paradise.taskdaemon.core.models.tgs.TokenResponseModel; +import me.aa07.paradise.taskdaemon.core.util.UtilConst; import org.apache.logging.log4j.Logger; import org.quartz.DisallowConcurrentExecution; import org.quartz.Job; @@ -76,8 +76,7 @@ public void execute(JobExecutionContext event) throws JobExecutionException { logger.info("[BouncerRestart] Sending auth token request"); HttpResponse response = client.send(httpreq, BodyHandlers.ofString()); - Gson gson = new Gson(); - TokenResponseModel tokres = gson.fromJson(response.body(), TokenResponseModel.class); + TokenResponseModel tokres = UtilConst.GSON.fromJson(response.body(), TokenResponseModel.class); // And send our restart request HttpRequest httreq2 = HttpRequest.newBuilder() diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRankJob.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRankJob.java index 6a72a31..811ac88 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRankJob.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRankJob.java @@ -7,8 +7,8 @@ import java.util.List; import java.util.Map; import java.util.Set; -import me.aa07.paradise.taskdaemon.core.database.DatabaseType; -import me.aa07.paradise.taskdaemon.core.database.DbCore; +import me.aa07.paradise.taskdaemon.core.services.database.DatabaseType; +import me.aa07.paradise.taskdaemon.core.services.database.DbCore; import me.aa07.paradise.taskdaemon.database.forums.Tables; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Admin; import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.AdminRecord; @@ -16,7 +16,6 @@ import org.jooq.DSLContext; import org.jooq.Record; import org.jooq.Result; -import org.jooq.SQLDialect; import org.quartz.DisallowConcurrentExecution; import org.quartz.Job; import org.quartz.JobDataMap; @@ -49,8 +48,8 @@ public void execute(JobExecutionContext context) throws JobExecutionException { logger.info("[DevRank] Starting dev rank sync"); try { - DSLContext forums_db = dbcore.jooq(DatabaseType.Forums, SQLDialect.MYSQL); - DSLContext game_db = dbcore.jooq(DatabaseType.GameDb, SQLDialect.MYSQL); + DSLContext forums_db = dbcore.jooq(DatabaseType.Forums); + DSLContext game_db = dbcore.jooq(DatabaseType.GameDb); // Collect all dev team ckeys from forums database List dev_team_ckeys = new ArrayList<>(); diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/ingameverifiedsync/IngameVerifiedSyncJob.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/ingameverifiedsync/IngameVerifiedSyncJob.java new file mode 100644 index 0000000..4c5cd29 --- /dev/null +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/ingameverifiedsync/IngameVerifiedSyncJob.java @@ -0,0 +1,358 @@ +package me.aa07.paradise.taskdaemon.core.modules.ingameverifiedsync; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.UUID; +import me.aa07.paradise.taskdaemon.core.models.tasks.DiscordRoleTaskArgsModel; +import me.aa07.paradise.taskdaemon.core.services.database.DatabaseType; +import me.aa07.paradise.taskdaemon.core.services.database.DbCore; +import me.aa07.paradise.taskdaemon.core.services.invision.InvisionUtil; +import me.aa07.paradise.taskdaemon.core.util.UtilConst; +import me.aa07.paradise.taskdaemon.core.util.UtilStr; +import me.aa07.paradise.taskdaemon.database.authentik.tables.records.AuthentikCoreUsersourceconnectionRecord; +import me.aa07.paradise.taskdaemon.database.automation.Tables; +import me.aa07.paradise.taskdaemon.database.automation.enums.TaskQueueTaskConsumer; +import me.aa07.paradise.taskdaemon.database.automation.tables.records.IngameVerifiedDirectoryRecord; +import me.aa07.paradise.taskdaemon.database.automation.tables.records.TaskQueueRecord; +import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.PlayerRecord; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.logging.log4j.Logger; +import org.jooq.Condition; +import org.jooq.DSLContext; +import org.jooq.Record1; +import org.jooq.Result; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.Job; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +@DisallowConcurrentExecution // NO +public class IngameVerifiedSyncJob implements Job { + /* + + - pull raw data from authentik + - keep track of new ones + - get discord IDs and add into table + - get forum IDs and add into table + - do forum syncage based on if their IGV or IGB + - remove entries from directory table that werent there before + - schedule task in ALICE to strip discord role + - remove forum group + - slap authentik ID onto rows in the player table + + */ + + @Override + public void execute(JobExecutionContext event) throws JobExecutionException { + JobDataMap datamap = event.getMergedJobDataMap(); + + // Get our logger - important + Object raw_logger = datamap.get("LOGGER"); + Optional logger_holder = Optional.empty(); + + if (raw_logger instanceof Logger l2) { + logger_holder = Optional.of(l2); + } + + if (!logger_holder.isPresent()) { + System.out.println("[IngameVerifiedSync] LOGGER WAS SOMEHOW NULL - THIS IS VERY BAD"); + return; + } + + Logger logger = logger_holder.get(); + logger.info("[IngameVerifiedSync] Starting up"); + + // Now get our DB + Object raw_db = datamap.get("DBCORE"); + Optional dbcore_holder = Optional.empty(); + + if (raw_db instanceof DbCore db2) { + dbcore_holder = Optional.of(db2); + } + + if (!dbcore_holder.isPresent()) { + logger.error("[IngameVerifiedSync] DBCORE WAS SOMEHOW NULL - THIS IS VERY BAD"); + return; + } + + DbCore dbcore = dbcore_holder.get(); + + // Now get the invision util + Object raw_iu = datamap.get("IU"); + Optional iu_holder = Optional.empty(); + + if (raw_iu instanceof InvisionUtil iu2) { + iu_holder = Optional.of(iu2); + } + + if (!iu_holder.isPresent()) { + logger.error("[IngameVerifiedSync] IU WAS SOMEHOW NULL - THIS IS VERY BAD"); + return; + } + + InvisionUtil iu = iu_holder.get(); + + DSLContext authentik_jooq = dbcore.jooq(DatabaseType.Authentik); + DSLContext automation_jooq = dbcore.jooq(DatabaseType.Automation); + DSLContext game_jooq = dbcore.jooq(DatabaseType.GameDb); + + // For now - we just want ckeys and authentik IDs - no more + Result authentik_records = authentik_jooq + .selectFrom(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION) + .where(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION.SOURCE_ID.eq(UtilConst.BYOND_OAUTH_SERVICE_ID)) + .fetch(); + + logger.info(String.format("[IngameVerifiedSync] Found %s accounts with linked byond accounts", authentik_records.size())); + + ArrayList only_authentik_ids = new ArrayList(); + + for (AuthentikCoreUsersourceconnectionRecord acuscr : authentik_records) { + only_authentik_ids.add(acuscr.getUserId()); + } + + // Records to purge + Result records_to_purge = automation_jooq.selectFrom(Tables.INGAME_VERIFIED_DIRECTORY) + .where(Tables.INGAME_VERIFIED_DIRECTORY.AUTHENTIK_ID.notIn(only_authentik_ids)) + .fetch(); + + int removed = 0; + for (IngameVerifiedDirectoryRecord ivdr : records_to_purge) { + // Step 1 - Strip their rank on the forums + if (ivdr.getForumId() != null) { + int forum_id = ivdr.getForumId(); + Pair> gsg_response = iu.getUserSecondaryGroups(forum_id); + + if (gsg_response.getLeft()) { + List forum_secondaries = gsg_response.getRight(); + if (forum_secondaries.contains(Integer.valueOf(UtilConst.INVISION_INGAMEVERIFIED_GID))) { + // This cast looks silly - but without it, java treats it as a numerical index not an object + forum_secondaries.remove(Integer.valueOf(UtilConst.INVISION_INGAMEVERIFIED_GID)); + + boolean ssg_response = iu.updateUserSecondaryGroups(forum_id, forum_secondaries); + + if (!ssg_response) { + logger.warn(String.format("[IngameVerifiedSync] Could not update secondaries for %s", forum_id)); + } + } + } else { + logger.warn(String.format("[IngameVerifiedSync] Could not get secondaries for %s", forum_id)); + } + } + + // Step 2 - Strip their rank on the discord + if (ivdr.getDiscordId() != null) { + TaskQueueRecord tqr = automation_jooq.newRecord(Tables.TASK_QUEUE); + tqr.setTaskId(UUID.randomUUID()); + tqr.setTaskConsumer(TaskQueueTaskConsumer.ALICE); + tqr.setTaskType("REMOVE_IGV_ROLE"); + + // No I will not apologise for these variable names + DiscordRoleTaskArgsModel drtam = new DiscordRoleTaskArgsModel(); + drtam.discordId = ivdr.getDiscordId(); + String drtam_json = UtilConst.GSON.toJson(drtam); + + tqr.setTaskArguments(drtam_json); + tqr.setDateInserted(dbcore.now()); + tqr.store(); + } + + // Step 3 - Clear their FUID ingame + PlayerRecord ingame_record = game_jooq.selectFrom(me.aa07.paradise.taskdaemon.database.gamedb.Tables.PLAYER) + .where(me.aa07.paradise.taskdaemon.database.gamedb.Tables.PLAYER.CKEY.eq(ivdr.getCkey())) + .fetchOne(); + + if (ingame_record != null) { + ingame_record.setFuid(null); + ingame_record.store(); + } + + // Step 4 - Clear from directory + ivdr.delete(); + removed++; + } + logger.info(String.format("[IngameVerifiedSync] Removed %s records for members who unlinked byond", removed)); + + // Now get a list of banned people + HashSet banned_ckeys = new HashSet(); + + // Shared + Condition unbanned_null = me.aa07.paradise.taskdaemon.database.gamedb.Tables.BAN.UNBANNED.isNull(); + Condition unbanned_0 = me.aa07.paradise.taskdaemon.database.gamedb.Tables.BAN.UNBANNED.eq((byte) 0); + Condition unban_combined_or = unbanned_null.or(unbanned_0); + + // Permaban + Condition bantype_perma = me.aa07.paradise.taskdaemon.database.gamedb.Tables.BAN.BANTYPE.eq("PERMABAN"); + + // Tempban + Condition bantype_temp = me.aa07.paradise.taskdaemon.database.gamedb.Tables.BAN.BANTYPE.eq("TEMPBAN"); + Condition tempban_expired = me.aa07.paradise.taskdaemon.database.gamedb.Tables.BAN.EXPIRATION_TIME.gt(dbcore.now()); + Condition tempban_combined_final = bantype_temp.and(tempban_expired); + + // Final condition + Condition ban_check_merged = bantype_perma.or(tempban_combined_final); + Condition is_banned = unban_combined_or.and(ban_check_merged); + + Result> raw_bans_result = game_jooq.selectDistinct(me.aa07.paradise.taskdaemon.database.gamedb.Tables.BAN.CKEY) + .from(me.aa07.paradise.taskdaemon.database.gamedb.Tables.BAN) + .where(is_banned) + .fetch(); + + for (Record1 rbr : raw_bans_result) { + banned_ckeys.add(rbr.value1()); + } + + logger.info(String.format("[IngameVerifiedSync] Loaded %s banned ckeys", banned_ckeys.size())); + + // Now begin the mass inserts + int raw_added = 0; + int raw_updated = 0; + for (AuthentikCoreUsersourceconnectionRecord acuscr : authentik_records) { + int authentik_user_ud = acuscr.getUserId(); + // First - see if they already exist in the directory + + if (automation_jooq.fetchExists(automation_jooq.selectFrom(Tables.INGAME_VERIFIED_DIRECTORY) + .where(Tables.INGAME_VERIFIED_DIRECTORY.AUTHENTIK_ID.eq(authentik_user_ud)))) { + + // Update if they do + raw_updated++; + + IngameVerifiedDirectoryRecord ivdr = automation_jooq.selectFrom(Tables.INGAME_VERIFIED_DIRECTORY) + .where(Tables.INGAME_VERIFIED_DIRECTORY.AUTHENTIK_ID.eq(authentik_user_ud)).fetchOne(); + + ivdr.setCkey(UtilStr.cleanCkey(acuscr.getIdentifier())); + ivdr.store(); + } else { + // Insert if they dont + IngameVerifiedDirectoryRecord ivdr = automation_jooq.newRecord(Tables.INGAME_VERIFIED_DIRECTORY); + ivdr.setAuthentikId(acuscr.getUserId()); + ivdr.setCkey(UtilStr.cleanCkey(acuscr.getIdentifier())); + ivdr.store(); + raw_added++; + } + } + + logger.info(String.format("[IngameVerifiedSync] Added %s records and updated %s for members who are linked", raw_added, raw_updated)); + + // Now slap forum IDs and discord onto them + Result records_to_update = automation_jooq + .selectFrom(Tables.INGAME_VERIFIED_DIRECTORY) + .fetch(); + + Result authentik_forums_records = authentik_jooq + .selectFrom(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION) + .where(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION.SOURCE_ID.eq(UtilConst.INVISION_OAUTH_SERVICE_ID)) + .fetch(); + + Result authentik_discord_records = authentik_jooq + .selectFrom(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION) + .where(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION.SOURCE_ID.eq(UtilConst.DISCORD_OAUTH_SERVICE_ID)) + .fetch(); + + Result gamedb_records = game_jooq.selectFrom(me.aa07.paradise.taskdaemon.database.gamedb.Tables.PLAYER).fetch(); + + HashMap authentik2forum = new HashMap(); + HashMap authentik2discord = new HashMap(); + HashMap ckey2gamerecord = new HashMap(); + + for (AuthentikCoreUsersourceconnectionRecord acuscr : authentik_forums_records) { + String forum_id = UtilStr.onlyNumbers(acuscr.getIdentifier()); // Some of these have UTF8-BOMs on them. I wish I was kidding. + authentik2forum.put(acuscr.getUserId(), Integer.parseInt(forum_id)); + } + + for (AuthentikCoreUsersourceconnectionRecord acuscr : authentik_discord_records) { + authentik2discord.put(acuscr.getUserId(), Long.parseLong(acuscr.getIdentifier())); + } + + for (PlayerRecord pr : gamedb_records) { + ckey2gamerecord.put(pr.getCkey(), pr); + } + + int forum_updated = 0; + int discord_updated = 0; + int game_updated = 0; + for (IngameVerifiedDirectoryRecord ivdr : records_to_update) { + boolean update_made = false; + int authentik_id = ivdr.getAuthentikId(); + String ckey = ivdr.getCkey(); + int forum_id = 0; + long discord_id = 0L; + + if (authentik2forum.containsKey(authentik_id)) { + forum_id = authentik2forum.get(authentik_id); + } + + if (authentik2discord.containsKey(authentik_id)) { + discord_id = authentik2discord.get(authentik_id); + } + + // Add forums + if (forum_id > 0 && (ivdr.getForumId() == null || !ivdr.getForumId().equals(forum_id))) { + // See if we have them as an ID + ivdr.setForumId(forum_id); + update_made = true; + forum_updated++; + + // ADD INVISION SECONDARY GROUPS HERE + Pair> gsg_response = iu.getUserSecondaryGroups(forum_id); + + if (gsg_response.getLeft()) { + List forum_secondaries = gsg_response.getRight(); + int target_group = banned_ckeys.contains(ckey) ? UtilConst.INVISION_INGAMEBANNED_GID : UtilConst.INVISION_INGAMEVERIFIED_GID; + if (!forum_secondaries.contains(target_group)) { + forum_secondaries.add(target_group); + + boolean ssg_response = iu.updateUserSecondaryGroups(forum_id, forum_secondaries); + + if (!ssg_response) { + logger.warn(String.format("[IngameVerifiedSync] Could not update secondaries for %s", forum_id)); + } + } + } else { + logger.warn(String.format("[IngameVerifiedSync] Could not get secondaries for %s", forum_id)); + } + } + + // Add discord + if (discord_id > 0 && (ivdr.getDiscordId() == null || !ivdr.getDiscordId().equals(discord_id))) { + ivdr.setDiscordId(discord_id); + update_made = true; + discord_updated++; + + // And make the ALICE task + TaskQueueRecord tqr = automation_jooq.newRecord(Tables.TASK_QUEUE); + tqr.setTaskId(UUID.randomUUID()); + tqr.setTaskConsumer(TaskQueueTaskConsumer.ALICE); + tqr.setTaskType(banned_ckeys.contains(ckey) ? "ADD_IGB_ROLE" : "ADD_IGV_ROLE"); + + // No I will not apologise for these variable names + DiscordRoleTaskArgsModel drtam = new DiscordRoleTaskArgsModel(); + drtam.discordId = discord_id; + String drtam_json = UtilConst.GSON.toJson(drtam); + + tqr.setTaskArguments(drtam_json); + tqr.setDateInserted(dbcore.now()); + tqr.store(); + } + + if (ckey2gamerecord.containsKey(ivdr.getCkey())) { + PlayerRecord game_row = ckey2gamerecord.get(ivdr.getCkey()); + if (game_row.getFuid() == null || game_row.getFuid() != authentik_id) { + game_row.setFuid((long) authentik_id); + game_row.store(); + game_updated++; + } + } + + if (update_made) { + ivdr.store(); + } + } + + logger.info(String.format("[IngameVerifiedSync] Update stats discord/forum/game - %s/%s/%s", discord_updated, forum_updated, game_updated)); + logger.info("[IngameVerifiedSync] Process complete"); + } +} diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/ip2asn/Ip2AsnJob.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/ip2asn/Ip2AsnJob.java index c20df52..a48e0d1 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/ip2asn/Ip2AsnJob.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/ip2asn/Ip2AsnJob.java @@ -1,6 +1,5 @@ package me.aa07.paradise.taskdaemon.core.modules.ip2asn; -import com.google.gson.Gson; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; @@ -11,15 +10,15 @@ import java.util.List; import java.util.Optional; import me.aa07.paradise.taskdaemon.core.config.Ip2AsnSerivceConfig; -import me.aa07.paradise.taskdaemon.core.database.DatabaseType; -import me.aa07.paradise.taskdaemon.core.database.DbCore; import me.aa07.paradise.taskdaemon.core.models.ip2asn.Ip2AsnResponseModel; +import me.aa07.paradise.taskdaemon.core.services.database.DatabaseType; +import me.aa07.paradise.taskdaemon.core.services.database.DbCore; +import me.aa07.paradise.taskdaemon.core.util.UtilConst; import me.aa07.paradise.taskdaemon.database.gamedb.Tables; import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.Ip2groupRecord; import org.apache.logging.log4j.Logger; import org.jooq.DSLContext; import org.jooq.Record1; -import org.jooq.SQLDialect; import org.jooq.Select; import org.jooq.types.UInteger; import org.quartz.DisallowConcurrentExecution; @@ -80,7 +79,7 @@ public void execute(JobExecutionContext event) throws JobExecutionException { Ip2AsnSerivceConfig config = ip2asn_cfg_holder.get(); - DSLContext ctx = dbcore.jooq(DatabaseType.GameDb, SQLDialect.MYSQL); + DSLContext ctx = dbcore.jooq(DatabaseType.GameDb); // So // JOOQ doesnt have INET_ATON, presumably because its a MySQL native @@ -134,7 +133,6 @@ public void execute(JobExecutionContext event) throws JobExecutionException { // Now do the big refresh HttpClient client = HttpClient.newHttpClient(); - Gson gson = new Gson(); for (String ip : ips_to_get) { try { // Get our AS - probably a more elegant way to do this but meh @@ -148,7 +146,7 @@ public void execute(JobExecutionContext event) throws JobExecutionException { HttpResponse response = client.send(httpreq, BodyHandlers.ofString()); // Decode the shenanigans - Ip2AsnResponseModel res_model = gson.fromJson(response.body(), Ip2AsnResponseModel.class); + Ip2AsnResponseModel res_model = UtilConst.GSON.fromJson(response.body(), Ip2AsnResponseModel.class); UInteger ip_uint = ip2uint(ip); UInteger asn = UInteger.valueOf(res_model.asn); diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/patreonsync/PatreonSyncJob.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/patreonsync/PatreonSyncJob.java index 08cac91..cc3dc58 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/patreonsync/PatreonSyncJob.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/patreonsync/PatreonSyncJob.java @@ -1,6 +1,5 @@ package me.aa07.paradise.taskdaemon.core.modules.patreonsync; -import com.google.gson.Gson; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; @@ -12,12 +11,13 @@ import java.util.Optional; import java.util.UUID; import me.aa07.paradise.taskdaemon.core.config.PatreonConfig; -import me.aa07.paradise.taskdaemon.core.database.DatabaseType; -import me.aa07.paradise.taskdaemon.core.database.DbCore; import me.aa07.paradise.taskdaemon.core.models.patreon.PatreonOuterResponseModel; import me.aa07.paradise.taskdaemon.core.models.patreon.PatreonRawResponseModel; import me.aa07.paradise.taskdaemon.core.models.patreon.PatreonUser; import me.aa07.paradise.taskdaemon.core.models.tasks.DiscordRoleTaskArgsModel; +import me.aa07.paradise.taskdaemon.core.services.database.DatabaseType; +import me.aa07.paradise.taskdaemon.core.services.database.DbCore; +import me.aa07.paradise.taskdaemon.core.util.UtilConst; import me.aa07.paradise.taskdaemon.core.util.UtilStr; import me.aa07.paradise.taskdaemon.database.authentik.tables.records.AuthentikCoreUsersourceconnectionRecord; import me.aa07.paradise.taskdaemon.database.automation.Tables; @@ -28,7 +28,6 @@ import org.apache.logging.log4j.Logger; import org.jooq.DSLContext; import org.jooq.Result; -import org.jooq.SQLDialect; import org.quartz.DisallowConcurrentExecution; import org.quartz.Job; import org.quartz.JobDataMap; @@ -48,10 +47,6 @@ public class PatreonSyncJob implements Job { */ - private static final UUID PATREON_OAUTH_SERVICE_ID = UUID.fromString("626f4935-d046-4957-9862-f26102e27a70"); - private static final UUID DISCORD_OAUTH_SERVICE_ID = UUID.fromString("bc9fb785-6a1f-434e-80da-26a37450a29a"); - private static final UUID BYOND_OAUTH_SERVICE_ID = UUID.fromString("d7a7b659-69bd-4435-b585-3b4ba97ca076"); - @Override public void execute(JobExecutionContext event) throws JobExecutionException { JobDataMap datamap = event.getMergedJobDataMap(); @@ -107,7 +102,6 @@ public void execute(JobExecutionContext event) throws JobExecutionException { // The patreon API is kinda bad // Everything goes into the same loose model and you have to manually parse out members and tiers // Boy thats fun - Gson gson = new Gson(); // we use this later ArrayList users = new ArrayList(); @@ -144,7 +138,7 @@ public void execute(JobExecutionContext event) throws JobExecutionException { fw.close(); */ - PatreonOuterResponseModel holder = gson.fromJson(response_body, PatreonOuterResponseModel.class); + PatreonOuterResponseModel holder = UtilConst.GSON.fromJson(response_body, PatreonOuterResponseModel.class); logger.info(String.format("[PatreonSync] Pulled %s raw models from Patreon", holder.data.size())); @@ -173,7 +167,7 @@ public void execute(JobExecutionContext event) throws JobExecutionException { } // Step 1 - Clear out old users - DSLContext automation_jooq = dbcore.jooq(DatabaseType.Automation, SQLDialect.MYSQL); + DSLContext automation_jooq = dbcore.jooq(DatabaseType.Automation); Result records_to_purge = automation_jooq.selectFrom(Tables.PATREON_SUPPORTERS) @@ -193,7 +187,7 @@ public void execute(JobExecutionContext event) throws JobExecutionException { // No I will not apologise for these variable names DiscordRoleTaskArgsModel drtam = new DiscordRoleTaskArgsModel(); drtam.discordId = database_discord_id; - String drtam_json = gson.toJson(drtam); + String drtam_json = UtilConst.GSON.toJson(drtam); tqr.setTaskArguments(drtam_json); tqr.setDateInserted(dbcore.now()); @@ -243,15 +237,15 @@ public void execute(JobExecutionContext event) throws JobExecutionException { logger.info(String.format("[PatreonSync] Inserted %s users, updated %s users", insert_count, update_count)); - DSLContext game_jooq = dbcore.jooq(DatabaseType.GameDb, SQLDialect.MYSQL); - DSLContext authentik_jooq = dbcore.jooq(DatabaseType.Authentik, SQLDialect.POSTGRES); + DSLContext game_jooq = dbcore.jooq(DatabaseType.GameDb); + DSLContext authentik_jooq = dbcore.jooq(DatabaseType.Authentik); // Find authentik users HashMap authentik_to_patreon = new HashMap(); findAuthentikUsers(only_member_ids, authentik_jooq, automation_jooq, logger, authentik_to_patreon); // Now find discord users - findDiscordUsers(authentik_jooq, automation_jooq, logger, authentik_to_patreon, gson, dbcore); + findDiscordUsers(authentik_jooq, automation_jooq, logger, authentik_to_patreon, dbcore); // Now get ckeys findCkeys(authentik_jooq, automation_jooq, logger, authentik_to_patreon); @@ -296,7 +290,7 @@ private static void findAuthentikUsers( AuthentikCoreUsersourceconnectionRecord authentik_record = authentikJooq .selectFrom(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION) .where(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION.IDENTIFIER.eq(String.valueOf(member_id))) - .and(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION.SOURCE_ID.eq(PATREON_OAUTH_SERVICE_ID)) + .and(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION.SOURCE_ID.eq(UtilConst.PATREON_OAUTH_SERVICE_ID)) .fetchOne(); if (authentik_record == null) { @@ -337,7 +331,6 @@ private static void findDiscordUsers( DSLContext automationJooq, Logger logger, HashMap authentik2patreon, - Gson gson, DbCore dbCore ) { HashMap authentik2discord = new HashMap(); @@ -349,7 +342,7 @@ private static void findDiscordUsers( AuthentikCoreUsersourceconnectionRecord authentik_record = authentikJooq .selectFrom(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION) .where(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION.USER_ID.eq(authentik_id)) - .and(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION.SOURCE_ID.eq(DISCORD_OAUTH_SERVICE_ID)) + .and(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION.SOURCE_ID.eq(UtilConst.DISCORD_OAUTH_SERVICE_ID)) .fetchOne(); if (authentik_record == null) { @@ -392,7 +385,7 @@ private static void findDiscordUsers( // No I will not apologise for these variable names DiscordRoleTaskArgsModel drtam = new DiscordRoleTaskArgsModel(); drtam.discordId = discord_id; - String drtam_json = gson.toJson(drtam); + String drtam_json = UtilConst.GSON.toJson(drtam); tqr.setTaskArguments(drtam_json); tqr.setDateInserted(dbCore.now()); @@ -412,7 +405,7 @@ private static void findDiscordUsers( // No I will not apologise for these variable names DiscordRoleTaskArgsModel drtam = new DiscordRoleTaskArgsModel(); drtam.discordId = discord_id; - String drtam_json = gson.toJson(drtam); + String drtam_json = UtilConst.GSON.toJson(drtam); tqr.setTaskArguments(drtam_json); tqr.setDateInserted(dbCore.now()); @@ -429,7 +422,7 @@ private static void findDiscordUsers( // No I will not apologise for these variable names DiscordRoleTaskArgsModel drtam = new DiscordRoleTaskArgsModel(); drtam.discordId = discord_id; - String drtam_json = gson.toJson(drtam); + String drtam_json = UtilConst.GSON.toJson(drtam); tqr.setTaskArguments(drtam_json); tqr.setDateInserted(dbCore.now()); @@ -461,7 +454,7 @@ private static void findCkeys( AuthentikCoreUsersourceconnectionRecord authentik_record = authentikJooq .selectFrom(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION) .where(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION.USER_ID.eq(authentik_id)) - .and(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION.SOURCE_ID.eq(BYOND_OAUTH_SERVICE_ID)) + .and(me.aa07.paradise.taskdaemon.database.authentik.Tables.AUTHENTIK_CORE_USERSOURCECONNECTION.SOURCE_ID.eq(UtilConst.BYOND_OAUTH_SERVICE_ID)) .fetchOne(); if (authentik_record == null) { diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/prlabel/PrLabelJob.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/prlabel/PrLabelJob.java index e9adf6d..7ddd913 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/prlabel/PrLabelJob.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/prlabel/PrLabelJob.java @@ -7,9 +7,9 @@ import java.util.Optional; import me.aa07.paradise.taskdaemon.core.config.GithubConfig; import me.aa07.paradise.taskdaemon.core.config.TgsConfig; -import me.aa07.paradise.taskdaemon.core.database.DatabaseType; -import me.aa07.paradise.taskdaemon.core.database.DbCore; import me.aa07.paradise.taskdaemon.core.models.prlabel.PullRequest; +import me.aa07.paradise.taskdaemon.core.services.database.DatabaseType; +import me.aa07.paradise.taskdaemon.core.services.database.DbCore; import me.aa07.paradise.taskdaemon.database.pullrequests.Tables; import me.aa07.paradise.taskdaemon.database.pullrequests.enums.PrsPrStatus; import me.aa07.paradise.taskdaemon.database.pullrequests.enums.VotesNewVoteType; @@ -20,7 +20,6 @@ import org.jooq.Record2; import org.jooq.Record4; import org.jooq.Result; -import org.jooq.SQLDialect; import org.jooq.impl.DSL; import org.kohsuke.github.GHIssueState; import org.kohsuke.github.GHLabel; @@ -104,7 +103,7 @@ public void execute(JobExecutionContext event) throws JobExecutionException { // Initial setup is done - lets now load the important bits // Get this now - we need it - DSLContext ctx = dbcore.jooq(DatabaseType.PullRequests, SQLDialect.MYSQL); + DSLContext ctx = dbcore.jooq(DatabaseType.PullRequests); // Dictionary that holds all this in a nice lookup HashMap prs = new HashMap(); diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/prlabel/StatusManager.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/prlabel/StatusManager.java index 0c68a0b..cc14779 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/prlabel/StatusManager.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/prlabel/StatusManager.java @@ -9,6 +9,7 @@ import java.util.List; import me.aa07.paradise.taskdaemon.core.config.GithubConfig; import me.aa07.paradise.taskdaemon.core.models.prlabel.PullRequest; +import me.aa07.paradise.taskdaemon.core.util.UtilConst; import me.aa07.paradise.taskdaemon.database.pullrequests.enums.VotesNewVoteType; import me.aa07.paradise.taskdaemon.database.pullrequests.enums.VotesNewVotingGroup; import org.apache.logging.log4j.Logger; @@ -61,9 +62,8 @@ public void processPr(PullRequest pr) throws IOException { } // If we got here we can begin the rest - Type inner_string_type = new TypeToken>() { - }.getType(); - List pr_types = new Gson().fromJson(pr.prTypes, inner_string_type); + Type inner_string_type = new TypeToken>() {}.getType(); + List pr_types = UtilConst.GSON.fromJson(pr.prTypes, inner_string_type); boolean passes_approval = false; boolean passes_review = false; diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/prlabel/TestmergeManager.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/prlabel/TestmergeManager.java index 30fe2d7..4bcdfc6 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/prlabel/TestmergeManager.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/prlabel/TestmergeManager.java @@ -1,6 +1,5 @@ package me.aa07.paradise.taskdaemon.core.modules.prlabel; -import com.google.gson.Gson; import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; @@ -15,6 +14,7 @@ import me.aa07.paradise.taskdaemon.core.models.tgs.DreamDaemonResponse; import me.aa07.paradise.taskdaemon.core.models.tgs.TestMerge; import me.aa07.paradise.taskdaemon.core.models.tgs.TokenResponseModel; +import me.aa07.paradise.taskdaemon.core.util.UtilConst; import org.apache.logging.log4j.Logger; public class TestmergeManager implements IPullRequestProcessor { @@ -56,8 +56,7 @@ public void setup() { logger.info("[PrLabelJob] [TestmergeManager] Sending auth token request"); HttpResponse response = client.send(httpreq, BodyHandlers.ofString()); - Gson gson = new Gson(); - TokenResponseModel tokres = gson.fromJson(response.body(), TokenResponseModel.class); + TokenResponseModel tokres = UtilConst.GSON.fromJson(response.body(), TokenResponseModel.class); HttpRequest httreq2 = HttpRequest.newBuilder() .uri(new URI(String.format("%s/api/DreamDaemon", tgsConfig.tgsHost))).GET() @@ -70,7 +69,7 @@ public void setup() { HttpClient client2 = HttpClient.newHttpClient(); HttpResponse response2 = client2.send(httreq2, BodyHandlers.ofString()); - DreamDaemonResponse ddr = gson.fromJson(response2.body(), DreamDaemonResponse.class); + DreamDaemonResponse ddr = UtilConst.GSON.fromJson(response2.body(), DreamDaemonResponse.class); if (ddr.activeCompileJob.revisionInformation.activeTestMerges != null) { for (TestMerge tm : ddr.activeCompileJob.revisionInformation.activeTestMerges) { diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profilercleanup/ProfilerCleanupJob.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profilercleanup/ProfilerCleanupJob.java index e6bf235..ddb198a 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profilercleanup/ProfilerCleanupJob.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profilercleanup/ProfilerCleanupJob.java @@ -1,12 +1,11 @@ package me.aa07.paradise.taskdaemon.core.modules.profilercleanup; import java.util.Optional; -import me.aa07.paradise.taskdaemon.core.database.DatabaseType; -import me.aa07.paradise.taskdaemon.core.database.DbCore; +import me.aa07.paradise.taskdaemon.core.services.database.DatabaseType; +import me.aa07.paradise.taskdaemon.core.services.database.DbCore; import me.aa07.paradise.taskdaemon.database.profiler.Tables; import org.apache.logging.log4j.Logger; import org.jooq.DSLContext; -import org.jooq.SQLDialect; import org.quartz.DisallowConcurrentExecution; import org.quartz.Job; import org.quartz.JobDataMap; @@ -50,7 +49,7 @@ public void execute(JobExecutionContext event) throws JobExecutionException { DbCore dbcore = dbcore_holder.get(); - DSLContext profiler_db = dbcore.jooq(DatabaseType.ProfilerDb, SQLDialect.MYSQL); + DSLContext profiler_db = dbcore.jooq(DatabaseType.ProfilerDb); logger.info("[ProfilerCleanup] Cleaning out profiler DB - proc samples"); profiler_db.delete(Tables.SAMPLES).where(Tables.SAMPLES.SAMPLETIME.lt(dbcore.now().minusDays(7))).execute(); diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/ProfilerWorker.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/ProfilerWorker.java index f5f2c99..af34140 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/ProfilerWorker.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/ProfilerWorker.java @@ -1,18 +1,17 @@ package me.aa07.paradise.taskdaemon.core.modules.profileringest; -import com.google.gson.Gson; import java.util.ArrayList; -import me.aa07.paradise.taskdaemon.core.database.DbCore; import me.aa07.paradise.taskdaemon.core.models.profiler.ProfilerHolder; import me.aa07.paradise.taskdaemon.core.modules.profileringest.processors.ProfilerProcProcessor; import me.aa07.paradise.taskdaemon.core.modules.profileringest.processors.ProfilerSendmapsProcessor; +import me.aa07.paradise.taskdaemon.core.services.database.DbCore; +import me.aa07.paradise.taskdaemon.core.util.UtilConst; import org.apache.logging.log4j.Logger; public class ProfilerWorker { private ArrayList queue; private Logger logger; private Object listLock; - private Gson gson; private ProfilerProcProcessor procProcessor; private ProfilerSendmapsProcessor sendmapsProcessor; @@ -25,7 +24,6 @@ public ProfilerWorker(DbCore database, Logger logger) { queue = new ArrayList(); listLock = new Object(); - gson = new Gson(); } // TODO - Refactor into quartz job @@ -75,7 +73,7 @@ private void processEntry(String entry) { long start = System.currentTimeMillis(); logger.info(String.format("Processing entry with size %s bytes", entry.length())); - ProfilerHolder holder = gson.fromJson(entry, ProfilerHolder.class); + ProfilerHolder holder = UtilConst.GSON.fromJson(entry, ProfilerHolder.class); logger.info(String.format("Round ID: %s | Profile size: %s bytes", holder.roundId, holder.profilerData.length())); procProcessor.processData(holder); diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/processors/ProfilerBaseProcessor.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/processors/ProfilerBaseProcessor.java index d40cfb3..d5427f7 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/processors/ProfilerBaseProcessor.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/processors/ProfilerBaseProcessor.java @@ -1,22 +1,18 @@ package me.aa07.paradise.taskdaemon.core.modules.profileringest.processors; -import com.google.gson.Gson; -import me.aa07.paradise.taskdaemon.core.database.DbCore; import me.aa07.paradise.taskdaemon.core.models.profiler.ProfilerHolder; +import me.aa07.paradise.taskdaemon.core.services.database.DbCore; import org.apache.logging.log4j.Logger; public abstract class ProfilerBaseProcessor { protected DbCore database; protected Logger logger; - protected Gson gson; private String processorName; public ProfilerBaseProcessor(DbCore database, Logger logger, String processorName) { this.database = database; this.logger = logger; this.processorName = processorName; - - gson = new Gson(); } protected void log(String txt) { diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/processors/ProfilerProcProcessor.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/processors/ProfilerProcProcessor.java index b7b55d3..00719fc 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/processors/ProfilerProcProcessor.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/processors/ProfilerProcProcessor.java @@ -2,16 +2,16 @@ import com.google.gson.reflect.TypeToken; import java.util.List; -import me.aa07.paradise.taskdaemon.core.database.DatabaseType; -import me.aa07.paradise.taskdaemon.core.database.DbCore; import me.aa07.paradise.taskdaemon.core.models.profiler.ProcData; import me.aa07.paradise.taskdaemon.core.models.profiler.ProfilerHolder; +import me.aa07.paradise.taskdaemon.core.services.database.DatabaseType; +import me.aa07.paradise.taskdaemon.core.services.database.DbCore; +import me.aa07.paradise.taskdaemon.core.util.UtilConst; import me.aa07.paradise.taskdaemon.database.profiler.Tables; import me.aa07.paradise.taskdaemon.database.profiler.tables.records.ProcsRecord; import me.aa07.paradise.taskdaemon.database.profiler.tables.records.SamplesRecord; import org.apache.logging.log4j.Logger; import org.jooq.DSLContext; -import org.jooq.SQLDialect; public class ProfilerProcProcessor extends ProfilerBaseProcessor { public ProfilerProcProcessor(DbCore database, Logger logger) { @@ -20,13 +20,13 @@ public ProfilerProcProcessor(DbCore database, Logger logger) { @Override protected void doProcessing(ProfilerHolder holder) { - List proc_list = gson.fromJson( + List proc_list = UtilConst.GSON.fromJson( holder.profilerData, new TypeToken>() {}.getType() ); log(String.format("Procs logged: %s", proc_list.size())); - DSLContext jooq = database.jooq(DatabaseType.ProfilerDb, SQLDialect.MYSQL); + DSLContext jooq = database.jooq(DatabaseType.ProfilerDb); for (ProcData procdata : proc_list) { long proc_id = getProcId(procdata.name); @@ -45,7 +45,7 @@ protected void doProcessing(ProfilerHolder holder) { @Override protected long getProcId(String procname) { - DSLContext ctx = database.jooq(DatabaseType.ProfilerDb, SQLDialect.MYSQL); + DSLContext ctx = database.jooq(DatabaseType.ProfilerDb); if (!ctx.fetchExists(ctx.select(Tables.PROCS.ID).from(Tables.PROCS).where(Tables.PROCS.PROCPATH.eq(procname)))) { // We dont exist, make us log(String.format("%s did not exist in the DB. It does now.", procname)); diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/processors/ProfilerSendmapsProcessor.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/processors/ProfilerSendmapsProcessor.java index 5f3b449..a7eab6d 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/processors/ProfilerSendmapsProcessor.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/profileringest/processors/ProfilerSendmapsProcessor.java @@ -2,16 +2,16 @@ import com.google.gson.reflect.TypeToken; import java.util.List; -import me.aa07.paradise.taskdaemon.core.database.DatabaseType; -import me.aa07.paradise.taskdaemon.core.database.DbCore; import me.aa07.paradise.taskdaemon.core.models.profiler.ProfilerHolder; import me.aa07.paradise.taskdaemon.core.models.profiler.SendmapsProcData; +import me.aa07.paradise.taskdaemon.core.services.database.DatabaseType; +import me.aa07.paradise.taskdaemon.core.services.database.DbCore; +import me.aa07.paradise.taskdaemon.core.util.UtilConst; import me.aa07.paradise.taskdaemon.database.profiler.Tables; import me.aa07.paradise.taskdaemon.database.profiler.tables.records.SendmapsProcsRecord; import me.aa07.paradise.taskdaemon.database.profiler.tables.records.SendmapsSamplesRecord; import org.apache.logging.log4j.Logger; import org.jooq.DSLContext; -import org.jooq.SQLDialect; public class ProfilerSendmapsProcessor extends ProfilerBaseProcessor { public ProfilerSendmapsProcessor(DbCore database, Logger logger) { @@ -20,13 +20,13 @@ public ProfilerSendmapsProcessor(DbCore database, Logger logger) { @Override protected void doProcessing(ProfilerHolder holder) { - List proc_list = gson.fromJson( + List proc_list = UtilConst.GSON.fromJson( holder.sendmapsData, new TypeToken>() {}.getType() ); log(String.format("Procs logged: %s", proc_list.size())); - DSLContext ctx = database.jooq(DatabaseType.ProfilerDb, SQLDialect.MYSQL); + DSLContext ctx = database.jooq(DatabaseType.ProfilerDb); for (SendmapsProcData procdata : proc_list) { long proc_id = getProcId(procdata.name); @@ -42,7 +42,7 @@ protected void doProcessing(ProfilerHolder holder) { @Override protected long getProcId(String procname) { - DSLContext ctx = database.jooq(DatabaseType.ProfilerDb, SQLDialect.MYSQL); + DSLContext ctx = database.jooq(DatabaseType.ProfilerDb); if (!ctx.fetchExists(ctx.select(Tables.SENDMAPS_PROCS.ID).from(Tables.SENDMAPS_PROCS).where(Tables.SENDMAPS_PROCS.PROCPATH.eq(procname)))) { // We dont exist, make us log(String.format("%s did not exist in the DB. It does now.", procname)); diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DatabaseType.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/services/database/DatabaseType.java similarity index 62% rename from TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DatabaseType.java rename to TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/services/database/DatabaseType.java index f58a88e..6a8e47f 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DatabaseType.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/services/database/DatabaseType.java @@ -1,4 +1,4 @@ -package me.aa07.paradise.taskdaemon.core.database; +package me.aa07.paradise.taskdaemon.core.services.database; public enum DatabaseType { Authentik, Automation, GameDb, Forums, ProfilerDb, PullRequests diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DbCore.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/services/database/DbCore.java similarity index 83% rename from TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DbCore.java rename to TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/services/database/DbCore.java index 8a65a0b..b67e59a 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DbCore.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/services/database/DbCore.java @@ -1,4 +1,4 @@ -package me.aa07.paradise.taskdaemon.core.database; +package me.aa07.paradise.taskdaemon.core.services.database; import java.sql.Connection; import java.sql.Timestamp; @@ -9,6 +9,7 @@ import me.aa07.paradise.taskdaemon.core.config.ConfigHolder; import me.aa07.paradise.taskdaemon.core.config.DatabaseConfig; import org.apache.commons.dbcp2.BasicDataSource; +import org.apache.commons.lang3.tuple.Pair; import org.apache.logging.log4j.Logger; import org.jooq.DSLContext; import org.jooq.SQLDialect; @@ -16,14 +17,14 @@ import org.jooq.impl.DSL; public class DbCore { - private HashMap connectionMap; + private HashMap> connectionMap; public DbCore(ConfigHolder config, Logger logger) { // Suppress JOOQ console spam System.getProperties().setProperty("org.jooq.no-logo", "true"); System.getProperties().setProperty("org.jooq.no-tips", "true"); - connectionMap = new HashMap(); + connectionMap = new HashMap>(); establishConnections(config); logger.info("Ready to handle DB requests"); @@ -79,21 +80,24 @@ private void establishConnections(ConfigHolder config) { for (DatabaseType dbtype : mysql_db_types.keySet()) { DatabaseConfig cfg = mysql_db_types.get(dbtype); DataSource ds = openMySqlDataSource(String.format("jdbc:mysql://%s/%s", cfg.host, cfg.database), cfg.username, cfg.password); - connectionMap.put(dbtype, ds); + connectionMap.put(dbtype, Pair.of(ds, SQLDialect.MYSQL)); } // And do special stuff for Postgres DatabaseConfig adb = config.authentikDatabase; - connectionMap.put(DatabaseType.Authentik, openPostgresDataSource(String.format("jdbc:postgresql://%s/%s", adb.host, adb.database), adb.username, adb.password)); + DataSource authentik_ds = openPostgresDataSource(String.format("jdbc:postgresql://%s/%s", adb.host, adb.database), adb.username, adb.password); + connectionMap.put(DatabaseType.Authentik, Pair.of(authentik_ds, SQLDialect.POSTGRES)); } // Get a DSL context - public DSLContext jooq(DatabaseType type, SQLDialect dialect) { + public DSLContext jooq(DatabaseType type) { if (!connectionMap.containsKey(type)) { throw new NoDataFoundException("Supplied type key not present in connection map"); } - return DSL.using(connectionMap.get(type), dialect); + Pair ds_pair = connectionMap.get(type); + + return DSL.using(ds_pair.getLeft(), ds_pair.getRight()); } // Easy way for NOW() in SQL diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/services/invision/HttpRequestMethod.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/services/invision/HttpRequestMethod.java new file mode 100644 index 0000000..92828ee --- /dev/null +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/services/invision/HttpRequestMethod.java @@ -0,0 +1,5 @@ +package me.aa07.paradise.taskdaemon.core.services.invision; + +public enum HttpRequestMethod { + Get, Post +} diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/services/invision/InvisionUtil.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/services/invision/InvisionUtil.java new file mode 100644 index 0000000..ee4a813 --- /dev/null +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/services/invision/InvisionUtil.java @@ -0,0 +1,125 @@ +package me.aa07.paradise.taskdaemon.core.services.invision; + +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpRequest.Builder; +import java.net.http.HttpResponse; +import java.net.http.HttpResponse.BodyHandlers; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Base64; +import java.util.List; +import me.aa07.paradise.taskdaemon.core.config.InvisionConfig; +import me.aa07.paradise.taskdaemon.core.models.invision.GetUserModel; +import me.aa07.paradise.taskdaemon.core.util.UtilConst; +import org.apache.commons.lang3.tuple.Pair; + +public class InvisionUtil { + private HttpClient httpClient; + private InvisionConfig invisionConfig; + + public InvisionUtil(InvisionConfig invisionConfig) { + this.invisionConfig = invisionConfig; + httpClient = HttpClient.newHttpClient(); + } + + private Pair makeInvisionRequest(String uri, HttpRequestMethod reqType, String bodyContent) throws Exception { + // Step 1 - Make our base + Builder request_builder = HttpRequest.newBuilder().uri(new URI(String.format("%s/%s", invisionConfig.apiBaseUrl, uri))); + + switch (reqType) { + case Get: + request_builder = request_builder.GET(); + break; + case Post: + if (bodyContent == null) { + request_builder = request_builder.POST(HttpRequest.BodyPublishers.noBody()); + } else { + request_builder = request_builder.POST(HttpRequest.BodyPublishers.ofString(bodyContent)); + } + break; + default: + throw new Exception(String.format("Request type %s not supported", reqType.toString())); + } + + // Generate auth header + String creds = String.format("%s:", invisionConfig.apiKey); + byte[] encoded_auth = Base64.getEncoder().encode(creds.getBytes(StandardCharsets.UTF_8)); + String auth_header = String.format("Basic %s", new String(encoded_auth)); + + HttpRequest final_request = request_builder.setHeader("Accept", "application/json") + .setHeader("Content-Type", "application/json") + .setHeader("Authorization", auth_header).build(); + + HttpResponse response = httpClient.send(final_request, BodyHandlers.ofString()); + + return Pair.of(response.body(), response.statusCode()); + } + + public Pair> getUserSecondaryGroups(int userId) { + ArrayList out_list = new ArrayList(); + String request_uri = String.format("core/members/%s", userId); + + Pair invision_response = null; + + // Send it off + try { + invision_response = makeInvisionRequest(request_uri, HttpRequestMethod.Get, null); + } catch (Exception e) { + e.printStackTrace(); + return Pair.of(false, out_list); + } + + // Shouldnt ever happen + if (invision_response == null || invision_response.getRight() != 200) { + return Pair.of(false, out_list); + } + + // Try decode + GetUserModel gum = UtilConst.GSON.fromJson(invision_response.getLeft(), GetUserModel.class); + + if (gum == null) { + return Pair.of(false, out_list); + } + + // This one does return true - they could have 0 secondary groups + if (gum.secondaryGroups == null) { + return Pair.of(true, out_list); + } + + // If we are here we can decode + for (GetUserModel.GroupHolder gh : gum.secondaryGroups) { + out_list.add(gh.id); + } + + return Pair.of(true, out_list); + } + + public boolean updateUserSecondaryGroups(int userId, List secondaryGroups) { + ArrayList group_ids_list_str = new ArrayList(); + for (Integer i : secondaryGroups) { + // I hate PHP array syntax + group_ids_list_str.add(String.format("secondaryGroups[]=%s", i.toString())); + } + String secondary_groups_str = String.join("&", group_ids_list_str); + + String request_uri = String.format("core/members/%s?%s", userId, secondary_groups_str); + Pair invision_response = null; + + // Send it off + try { + invision_response = makeInvisionRequest(request_uri, HttpRequestMethod.Post, null); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + // Shouldnt ever happen + if (invision_response == null || invision_response.getRight() != 200) { + return false; + } + + return true; + } +} diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/util/UtilConst.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/util/UtilConst.java new file mode 100644 index 0000000..fb448f9 --- /dev/null +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/util/UtilConst.java @@ -0,0 +1,16 @@ +package me.aa07.paradise.taskdaemon.core.util; + +import com.google.gson.Gson; +import java.util.UUID; + +public class UtilConst { + public static final UUID BYOND_OAUTH_SERVICE_ID = UUID.fromString("d7a7b659-69bd-4435-b585-3b4ba97ca076"); + public static final UUID DISCORD_OAUTH_SERVICE_ID = UUID.fromString("bc9fb785-6a1f-434e-80da-26a37450a29a"); + public static final UUID INVISION_OAUTH_SERVICE_ID = UUID.fromString("4634c7d7-2bad-4139-a05f-13f296b20af8"); + public static final UUID PATREON_OAUTH_SERVICE_ID = UUID.fromString("626f4935-d046-4957-9862-f26102e27a70"); + + public static final int INVISION_INGAMEVERIFIED_GID = 30; + public static final int INVISION_INGAMEBANNED_GID = 31; + + public static final Gson GSON = new Gson(); +} diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/util/UtilStr.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/util/UtilStr.java index 478615a..8f7afd1 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/util/UtilStr.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/util/UtilStr.java @@ -4,13 +4,14 @@ public class UtilStr { private static final Pattern CKEY_PATTERN = Pattern.compile("[^a-z0-9]"); + private static final Pattern ONLY_NUMBERS = Pattern.compile("[^0-9]"); public static String cleanCkey(String ckey) { // If blank got passed, dont do it if (ckey == null) { return ""; } - + // Lowercase it ckey = ckey.toLowerCase(); @@ -21,4 +22,14 @@ public static String cleanCkey(String ckey) { // Split anything else out return CKEY_PATTERN.matcher(ckey).replaceAll(""); } + + public static String onlyNumbers(String input) { + // If blank got passed, dont do it + if (input == null) { + return ""; + } + + // Annihilate everything else + return ONLY_NUMBERS.matcher(input).replaceAll(""); + } } diff --git a/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Aa07Automation.java b/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Aa07Automation.java index f732b91..e899594 100644 --- a/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Aa07Automation.java +++ b/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Aa07Automation.java @@ -11,6 +11,7 @@ import me.aa07.paradise.taskdaemon.database.automation.tables.Availability; import me.aa07.paradise.taskdaemon.database.automation.tables.GithubLinks; import me.aa07.paradise.taskdaemon.database.automation.tables.Images; +import me.aa07.paradise.taskdaemon.database.automation.tables.IngameVerifiedDirectory; import me.aa07.paradise.taskdaemon.database.automation.tables.MemberCache; import me.aa07.paradise.taskdaemon.database.automation.tables.PatreonSupporters; import me.aa07.paradise.taskdaemon.database.automation.tables.ShortUrls; @@ -54,6 +55,11 @@ public class Aa07Automation extends SchemaImpl { */ public final Images IMAGES = Images.IMAGES; + /** + * The table aa07_automation.ingame_verified_directory. + */ + public final IngameVerifiedDirectory INGAME_VERIFIED_DIRECTORY = IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY; + /** * The table aa07_automation.member_cache. */ @@ -94,6 +100,7 @@ public final List> getTables() { Availability.AVAILABILITY, GithubLinks.GITHUB_LINKS, Images.IMAGES, + IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY, MemberCache.MEMBER_CACHE, PatreonSupporters.PATREON_SUPPORTERS, ShortUrls.SHORT_URLS, diff --git a/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Indexes.java b/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Indexes.java index 7c23d80..8a57fb0 100644 --- a/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Indexes.java +++ b/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Indexes.java @@ -5,6 +5,7 @@ import me.aa07.paradise.taskdaemon.database.automation.tables.AdminPhpLog; +import me.aa07.paradise.taskdaemon.database.automation.tables.IngameVerifiedDirectory; import me.aa07.paradise.taskdaemon.database.automation.tables.PatreonSupporters; import me.aa07.paradise.taskdaemon.database.automation.tables.TaskQueue; @@ -25,6 +26,7 @@ public class Indexes { // ------------------------------------------------------------------------- public static final Index PATREON_SUPPORTERS_CKEY = Internal.createIndex(DSL.name("ckey"), PatreonSupporters.PATREON_SUPPORTERS, new OrderField[] { PatreonSupporters.PATREON_SUPPORTERS.CKEY }, false); + public static final Index INGAME_VERIFIED_DIRECTORY_DISCORD_ID = Internal.createIndex(DSL.name("discord_id"), IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY, new OrderField[] { IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY.DISCORD_ID }, false); public static final Index ADMIN_PHP_LOG_FUID = Internal.createIndex(DSL.name("fuid"), AdminPhpLog.ADMIN_PHP_LOG, new OrderField[] { AdminPhpLog.ADMIN_PHP_LOG.FUID }, false); public static final Index TASK_QUEUE_PROCESSED = Internal.createIndex(DSL.name("processed"), TaskQueue.TASK_QUEUE, new OrderField[] { TaskQueue.TASK_QUEUE.PROCESSED }, false); public static final Index TASK_QUEUE_TASK_CONSUMER = Internal.createIndex(DSL.name("task_consumer"), TaskQueue.TASK_QUEUE, new OrderField[] { TaskQueue.TASK_QUEUE.TASK_CONSUMER }, false); diff --git a/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Keys.java b/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Keys.java index 8cdfbf1..93e6150 100644 --- a/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Keys.java +++ b/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Keys.java @@ -8,6 +8,7 @@ import me.aa07.paradise.taskdaemon.database.automation.tables.Availability; import me.aa07.paradise.taskdaemon.database.automation.tables.GithubLinks; import me.aa07.paradise.taskdaemon.database.automation.tables.Images; +import me.aa07.paradise.taskdaemon.database.automation.tables.IngameVerifiedDirectory; import me.aa07.paradise.taskdaemon.database.automation.tables.MemberCache; import me.aa07.paradise.taskdaemon.database.automation.tables.PatreonSupporters; import me.aa07.paradise.taskdaemon.database.automation.tables.ShortUrls; @@ -16,6 +17,7 @@ import me.aa07.paradise.taskdaemon.database.automation.tables.records.AvailabilityRecord; import me.aa07.paradise.taskdaemon.database.automation.tables.records.GithubLinksRecord; import me.aa07.paradise.taskdaemon.database.automation.tables.records.ImagesRecord; +import me.aa07.paradise.taskdaemon.database.automation.tables.records.IngameVerifiedDirectoryRecord; import me.aa07.paradise.taskdaemon.database.automation.tables.records.MemberCacheRecord; import me.aa07.paradise.taskdaemon.database.automation.tables.records.PatreonSupportersRecord; import me.aa07.paradise.taskdaemon.database.automation.tables.records.ShortUrlsRecord; @@ -43,6 +45,8 @@ public class Keys { public static final UniqueKey KEY_AVAILABILITY_PRIMARY = Internal.createUniqueKey(Availability.AVAILABILITY, DSL.name("KEY_availability_PRIMARY"), new TableField[] { Availability.AVAILABILITY.ID }, true); public static final UniqueKey KEY_GITHUB_LINKS_PRIMARY = Internal.createUniqueKey(GithubLinks.GITHUB_LINKS, DSL.name("KEY_github_links_PRIMARY"), new TableField[] { GithubLinks.GITHUB_LINKS.GITHUB_ID }, true); public static final UniqueKey KEY_IMAGES_PRIMARY = Internal.createUniqueKey(Images.IMAGES, DSL.name("KEY_images_PRIMARY"), new TableField[] { Images.IMAGES.ID }, true); + public static final UniqueKey KEY_INGAME_VERIFIED_DIRECTORY_CKEY = Internal.createUniqueKey(IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY, DSL.name("KEY_ingame_verified_directory_ckey"), new TableField[] { IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY.CKEY }, true); + public static final UniqueKey KEY_INGAME_VERIFIED_DIRECTORY_PRIMARY = Internal.createUniqueKey(IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY, DSL.name("KEY_ingame_verified_directory_PRIMARY"), new TableField[] { IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY.AUTHENTIK_ID }, true); public static final UniqueKey KEY_MEMBER_CACHE_PRIMARY = Internal.createUniqueKey(MemberCache.MEMBER_CACHE, DSL.name("KEY_member_cache_PRIMARY"), new TableField[] { MemberCache.MEMBER_CACHE.FUID }, true); public static final UniqueKey KEY_PATREON_SUPPORTERS_PRIMARY = Internal.createUniqueKey(PatreonSupporters.PATREON_SUPPORTERS, DSL.name("KEY_patreon_supporters_PRIMARY"), new TableField[] { PatreonSupporters.PATREON_SUPPORTERS.MEMBER_ID }, true); public static final UniqueKey KEY_SHORT_URLS_PRIMARY = Internal.createUniqueKey(ShortUrls.SHORT_URLS, DSL.name("KEY_short_urls_PRIMARY"), new TableField[] { ShortUrls.SHORT_URLS.URL_KEY }, true); diff --git a/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Tables.java b/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Tables.java index 9020f36..3f637ee 100644 --- a/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Tables.java +++ b/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/Tables.java @@ -8,6 +8,7 @@ import me.aa07.paradise.taskdaemon.database.automation.tables.Availability; import me.aa07.paradise.taskdaemon.database.automation.tables.GithubLinks; import me.aa07.paradise.taskdaemon.database.automation.tables.Images; +import me.aa07.paradise.taskdaemon.database.automation.tables.IngameVerifiedDirectory; import me.aa07.paradise.taskdaemon.database.automation.tables.MemberCache; import me.aa07.paradise.taskdaemon.database.automation.tables.PatreonSupporters; import me.aa07.paradise.taskdaemon.database.automation.tables.ShortUrls; @@ -40,6 +41,11 @@ public class Tables { */ public static final Images IMAGES = Images.IMAGES; + /** + * The table aa07_automation.ingame_verified_directory. + */ + public static final IngameVerifiedDirectory INGAME_VERIFIED_DIRECTORY = IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY; + /** * The table aa07_automation.member_cache. */ diff --git a/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/tables/IngameVerifiedDirectory.java b/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/tables/IngameVerifiedDirectory.java new file mode 100644 index 0000000..4ac2d94 --- /dev/null +++ b/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/tables/IngameVerifiedDirectory.java @@ -0,0 +1,173 @@ +/* + * This file is generated by jOOQ. + */ +package me.aa07.paradise.taskdaemon.database.automation.tables; + + +import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.List; + +import me.aa07.paradise.taskdaemon.database.automation.Aa07Automation; +import me.aa07.paradise.taskdaemon.database.automation.Indexes; +import me.aa07.paradise.taskdaemon.database.automation.Keys; +import me.aa07.paradise.taskdaemon.database.automation.tables.records.IngameVerifiedDirectoryRecord; + +import org.jooq.Field; +import org.jooq.ForeignKey; +import org.jooq.Index; +import org.jooq.Name; +import org.jooq.Record; +import org.jooq.Row5; +import org.jooq.Schema; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.TableOptions; +import org.jooq.UniqueKey; +import org.jooq.impl.DSL; +import org.jooq.impl.SQLDataType; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class IngameVerifiedDirectory extends TableImpl { + + private static final long serialVersionUID = 1L; + + /** + * The reference instance of + * aa07_automation.ingame_verified_directory + */ + public static final IngameVerifiedDirectory INGAME_VERIFIED_DIRECTORY = new IngameVerifiedDirectory(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return IngameVerifiedDirectoryRecord.class; + } + + /** + * The column + * aa07_automation.ingame_verified_directory.authentik_id. + */ + public final TableField AUTHENTIK_ID = createField(DSL.name("authentik_id"), SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * The column aa07_automation.ingame_verified_directory.ckey. + */ + public final TableField CKEY = createField(DSL.name("ckey"), SQLDataType.VARCHAR(128).nullable(false), this, ""); + + /** + * The column + * aa07_automation.ingame_verified_directory.discord_id. + */ + public final TableField DISCORD_ID = createField(DSL.name("discord_id"), SQLDataType.BIGINT.defaultValue(DSL.inline("NULL", SQLDataType.BIGINT)), this, ""); + + /** + * The column + * aa07_automation.ingame_verified_directory.forum_id. + */ + public final TableField FORUM_ID = createField(DSL.name("forum_id"), SQLDataType.INTEGER.defaultValue(DSL.inline("NULL", SQLDataType.INTEGER)), this, ""); + + /** + * The column + * aa07_automation.ingame_verified_directory.date_inserted. + */ + public final TableField DATE_INSERTED = createField(DSL.name("date_inserted"), SQLDataType.LOCALDATETIME(0).nullable(false).defaultValue(DSL.field("current_timestamp()", SQLDataType.LOCALDATETIME)), this, ""); + + private IngameVerifiedDirectory(Name alias, Table aliased) { + this(alias, aliased, null); + } + + private IngameVerifiedDirectory(Name alias, Table aliased, Field[] parameters) { + super(alias, null, aliased, parameters, DSL.comment(""), TableOptions.table()); + } + + /** + * Create an aliased aa07_automation.ingame_verified_directory + * table reference + */ + public IngameVerifiedDirectory(String alias) { + this(DSL.name(alias), INGAME_VERIFIED_DIRECTORY); + } + + /** + * Create an aliased aa07_automation.ingame_verified_directory + * table reference + */ + public IngameVerifiedDirectory(Name alias) { + this(alias, INGAME_VERIFIED_DIRECTORY); + } + + /** + * Create a aa07_automation.ingame_verified_directory table + * reference + */ + public IngameVerifiedDirectory() { + this(DSL.name("ingame_verified_directory"), null); + } + + public IngameVerifiedDirectory(Table child, ForeignKey key) { + super(child, key, INGAME_VERIFIED_DIRECTORY); + } + + @Override + public Schema getSchema() { + return aliased() ? null : Aa07Automation.AA07_AUTOMATION; + } + + @Override + public List getIndexes() { + return Arrays.asList(Indexes.INGAME_VERIFIED_DIRECTORY_DISCORD_ID); + } + + @Override + public UniqueKey getPrimaryKey() { + return Keys.KEY_INGAME_VERIFIED_DIRECTORY_PRIMARY; + } + + @Override + public List> getUniqueKeys() { + return Arrays.asList(Keys.KEY_INGAME_VERIFIED_DIRECTORY_CKEY); + } + + @Override + public IngameVerifiedDirectory as(String alias) { + return new IngameVerifiedDirectory(DSL.name(alias), this); + } + + @Override + public IngameVerifiedDirectory as(Name alias) { + return new IngameVerifiedDirectory(alias, this); + } + + /** + * Rename this table + */ + @Override + public IngameVerifiedDirectory rename(String name) { + return new IngameVerifiedDirectory(DSL.name(name), null); + } + + /** + * Rename this table + */ + @Override + public IngameVerifiedDirectory rename(Name name) { + return new IngameVerifiedDirectory(name, null); + } + + // ------------------------------------------------------------------------- + // Row5 type methods + // ------------------------------------------------------------------------- + + @Override + public Row5 fieldsRow() { + return (Row5) super.fieldsRow(); + } +} diff --git a/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/tables/records/IngameVerifiedDirectoryRecord.java b/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/tables/records/IngameVerifiedDirectoryRecord.java new file mode 100644 index 0000000..53e0221 --- /dev/null +++ b/TaskDaemon.Database.Automation/src/me/aa07/paradise/taskdaemon/database/automation/tables/records/IngameVerifiedDirectoryRecord.java @@ -0,0 +1,265 @@ +/* + * This file is generated by jOOQ. + */ +package me.aa07.paradise.taskdaemon.database.automation.tables.records; + + +import java.time.LocalDateTime; + +import me.aa07.paradise.taskdaemon.database.automation.tables.IngameVerifiedDirectory; + +import org.jooq.Field; +import org.jooq.Record1; +import org.jooq.Record5; +import org.jooq.Row5; +import org.jooq.impl.UpdatableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class IngameVerifiedDirectoryRecord extends UpdatableRecordImpl implements Record5 { + + private static final long serialVersionUID = 1L; + + /** + * Setter for + * aa07_automation.ingame_verified_directory.authentik_id. + */ + public void setAuthentikId(Integer value) { + set(0, value); + } + + /** + * Getter for + * aa07_automation.ingame_verified_directory.authentik_id. + */ + public Integer getAuthentikId() { + return (Integer) get(0); + } + + /** + * Setter for aa07_automation.ingame_verified_directory.ckey. + */ + public void setCkey(String value) { + set(1, value); + } + + /** + * Getter for aa07_automation.ingame_verified_directory.ckey. + */ + public String getCkey() { + return (String) get(1); + } + + /** + * Setter for + * aa07_automation.ingame_verified_directory.discord_id. + */ + public void setDiscordId(Long value) { + set(2, value); + } + + /** + * Getter for + * aa07_automation.ingame_verified_directory.discord_id. + */ + public Long getDiscordId() { + return (Long) get(2); + } + + /** + * Setter for + * aa07_automation.ingame_verified_directory.forum_id. + */ + public void setForumId(Integer value) { + set(3, value); + } + + /** + * Getter for + * aa07_automation.ingame_verified_directory.forum_id. + */ + public Integer getForumId() { + return (Integer) get(3); + } + + /** + * Setter for + * aa07_automation.ingame_verified_directory.date_inserted. + */ + public void setDateInserted(LocalDateTime value) { + set(4, value); + } + + /** + * Getter for + * aa07_automation.ingame_verified_directory.date_inserted. + */ + public LocalDateTime getDateInserted() { + return (LocalDateTime) get(4); + } + + // ------------------------------------------------------------------------- + // Primary key information + // ------------------------------------------------------------------------- + + @Override + public Record1 key() { + return (Record1) super.key(); + } + + // ------------------------------------------------------------------------- + // Record5 type implementation + // ------------------------------------------------------------------------- + + @Override + public Row5 fieldsRow() { + return (Row5) super.fieldsRow(); + } + + @Override + public Row5 valuesRow() { + return (Row5) super.valuesRow(); + } + + @Override + public Field field1() { + return IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY.AUTHENTIK_ID; + } + + @Override + public Field field2() { + return IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY.CKEY; + } + + @Override + public Field field3() { + return IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY.DISCORD_ID; + } + + @Override + public Field field4() { + return IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY.FORUM_ID; + } + + @Override + public Field field5() { + return IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY.DATE_INSERTED; + } + + @Override + public Integer component1() { + return getAuthentikId(); + } + + @Override + public String component2() { + return getCkey(); + } + + @Override + public Long component3() { + return getDiscordId(); + } + + @Override + public Integer component4() { + return getForumId(); + } + + @Override + public LocalDateTime component5() { + return getDateInserted(); + } + + @Override + public Integer value1() { + return getAuthentikId(); + } + + @Override + public String value2() { + return getCkey(); + } + + @Override + public Long value3() { + return getDiscordId(); + } + + @Override + public Integer value4() { + return getForumId(); + } + + @Override + public LocalDateTime value5() { + return getDateInserted(); + } + + @Override + public IngameVerifiedDirectoryRecord value1(Integer value) { + setAuthentikId(value); + return this; + } + + @Override + public IngameVerifiedDirectoryRecord value2(String value) { + setCkey(value); + return this; + } + + @Override + public IngameVerifiedDirectoryRecord value3(Long value) { + setDiscordId(value); + return this; + } + + @Override + public IngameVerifiedDirectoryRecord value4(Integer value) { + setForumId(value); + return this; + } + + @Override + public IngameVerifiedDirectoryRecord value5(LocalDateTime value) { + setDateInserted(value); + return this; + } + + @Override + public IngameVerifiedDirectoryRecord values(Integer value1, String value2, Long value3, Integer value4, LocalDateTime value5) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached IngameVerifiedDirectoryRecord + */ + public IngameVerifiedDirectoryRecord() { + super(IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY); + } + + /** + * Create a detached, initialised IngameVerifiedDirectoryRecord + */ + public IngameVerifiedDirectoryRecord(Integer authentikId, String ckey, Long discordId, Integer forumId, LocalDateTime dateInserted) { + super(IngameVerifiedDirectory.INGAME_VERIFIED_DIRECTORY); + + setAuthentikId(authentikId); + setCkey(ckey); + setDiscordId(discordId); + setForumId(forumId); + setDateInserted(dateInserted); + } +} diff --git a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/Indexes.java b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/Indexes.java index 56b9fd5..f667a84 100644 --- a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/Indexes.java +++ b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/Indexes.java @@ -17,8 +17,8 @@ import me.aa07.paradise.taskdaemon.database.gamedb.tables.JsonDatumSaves; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Library; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Notes; -import me.aa07.paradise.taskdaemon.database.gamedb.tables.OauthTokens; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Player; +import me.aa07.paradise.taskdaemon.database.gamedb.tables.TaskQueue; import org.jooq.Index; import org.jooq.OrderField; @@ -45,7 +45,6 @@ public class Indexes { public static final Index JSON_DATUM_SAVES_CKEY = Internal.createIndex(DSL.name("ckey"), JsonDatumSaves.JSON_DATUM_SAVES, new OrderField[] { JsonDatumSaves.JSON_DATUM_SAVES.CKEY }, false); public static final Index LIBRARY_CKEY = Internal.createIndex(DSL.name("ckey"), Library.LIBRARY, new OrderField[] { Library.LIBRARY.CKEY }, false); public static final Index NOTES_CKEY = Internal.createIndex(DSL.name("ckey"), Notes.NOTES, new OrderField[] { Notes.NOTES.CKEY }, false); - public static final Index OAUTH_TOKENS_CKEY = Internal.createIndex(DSL.name("ckey"), OauthTokens.OAUTH_TOKENS, new OrderField[] { OauthTokens.OAUTH_TOKENS.CKEY }, false); public static final Index BAN_COMPUTERID = Internal.createIndex(DSL.name("computerid"), Ban.BAN, new OrderField[] { Ban.BAN.COMPUTERID }, false); public static final Index CONNECTION_LOG_COMPUTERID = Internal.createIndex(DSL.name("computerid"), ConnectionLog.CONNECTION_LOG, new OrderField[] { ConnectionLog.CONNECTION_LOG.COMPUTERID }, false); public static final Index PLAYER_COMPUTERID = Internal.createIndex(DSL.name("computerid"), Player.PLAYER, new OrderField[] { Player.PLAYER.COMPUTERID }, false); @@ -61,6 +60,7 @@ public class Indexes { public static final Index PLAYER_IP = Internal.createIndex(DSL.name("ip"), Player.PLAYER, new OrderField[] { Player.PLAYER.IP }, false); public static final Index PLAYER_LASTSEEN = Internal.createIndex(DSL.name("lastseen"), Player.PLAYER, new OrderField[] { Player.PLAYER.LASTSEEN }, false); public static final Index ADMIN_RANKS_NAME = Internal.createIndex(DSL.name("name"), AdminRanks.ADMIN_RANKS, new OrderField[] { AdminRanks.ADMIN_RANKS.NAME }, false); + public static final Index TASK_QUEUE_PROCESSED = Internal.createIndex(DSL.name("processed"), TaskQueue.TASK_QUEUE, new OrderField[] { TaskQueue.TASK_QUEUE.PROCESSED }, false); public static final Index NOTES_PUBLIC = Internal.createIndex(DSL.name("public"), Notes.NOTES, new OrderField[] { Notes.NOTES.PUBLIC }, false); public static final Index BUG_REPORTS_SUBMITTED = Internal.createIndex(DSL.name("submitted"), BugReports.BUG_REPORTS, new OrderField[] { BugReports.BUG_REPORTS.SUBMITTED }, false); } diff --git a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/Keys.java b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/Keys.java index 88ef9f7..796c0a2 100644 --- a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/Keys.java +++ b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/Keys.java @@ -24,12 +24,12 @@ import me.aa07.paradise.taskdaemon.database.gamedb.tables.Library; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Memo; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Notes; -import me.aa07.paradise.taskdaemon.database.gamedb.tables.OauthTokens; import me.aa07.paradise.taskdaemon.database.gamedb.tables.PaiSaves; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Player; import me.aa07.paradise.taskdaemon.database.gamedb.tables.PlaytimeHistory; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Privacy; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Round; +import me.aa07.paradise.taskdaemon.database.gamedb.tables.TaskQueue; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Tickets; import me.aa07.paradise.taskdaemon.database.gamedb.tables.VpnWhitelist; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Watch; @@ -54,12 +54,12 @@ import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.LibraryRecord; import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.MemoRecord; import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.NotesRecord; -import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.OauthTokensRecord; import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.PaiSavesRecord; import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.PlayerRecord; import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.PlaytimeHistoryRecord; import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.PrivacyRecord; import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.RoundRecord; +import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.TaskQueueRecord; import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.TicketsRecord; import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.VpnWhitelistRecord; import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.WatchRecord; @@ -104,7 +104,6 @@ public class Keys { public static final UniqueKey KEY_LIBRARY_PRIMARY = Internal.createUniqueKey(Library.LIBRARY, DSL.name("KEY_library_PRIMARY"), new TableField[] { Library.LIBRARY.ID }, true); public static final UniqueKey KEY_MEMO_PRIMARY = Internal.createUniqueKey(Memo.MEMO, DSL.name("KEY_memo_PRIMARY"), new TableField[] { Memo.MEMO.CKEY }, true); public static final UniqueKey KEY_NOTES_PRIMARY = Internal.createUniqueKey(Notes.NOTES, DSL.name("KEY_notes_PRIMARY"), new TableField[] { Notes.NOTES.ID }, true); - public static final UniqueKey KEY_OAUTH_TOKENS_PRIMARY = Internal.createUniqueKey(OauthTokens.OAUTH_TOKENS, DSL.name("KEY_oauth_tokens_PRIMARY"), new TableField[] { OauthTokens.OAUTH_TOKENS.TOKEN }, true); public static final UniqueKey KEY_PAI_SAVES_CKEY = Internal.createUniqueKey(PaiSaves.PAI_SAVES, DSL.name("KEY_pai_saves_ckey"), new TableField[] { PaiSaves.PAI_SAVES.CKEY }, true); public static final UniqueKey KEY_PAI_SAVES_PRIMARY = Internal.createUniqueKey(PaiSaves.PAI_SAVES, DSL.name("KEY_pai_saves_PRIMARY"), new TableField[] { PaiSaves.PAI_SAVES.ID }, true); public static final UniqueKey KEY_PLAYER_CKEY = Internal.createUniqueKey(Player.PLAYER, DSL.name("KEY_player_ckey"), new TableField[] { Player.PLAYER.CKEY }, true); @@ -112,6 +111,7 @@ public class Keys { public static final UniqueKey KEY_PLAYTIME_HISTORY_PRIMARY = Internal.createUniqueKey(PlaytimeHistory.PLAYTIME_HISTORY, DSL.name("KEY_playtime_history_PRIMARY"), new TableField[] { PlaytimeHistory.PLAYTIME_HISTORY.CKEY, PlaytimeHistory.PLAYTIME_HISTORY.DATE }, true); public static final UniqueKey KEY_PRIVACY_PRIMARY = Internal.createUniqueKey(Privacy.PRIVACY, DSL.name("KEY_privacy_PRIMARY"), new TableField[] { Privacy.PRIVACY.CKEY }, true); public static final UniqueKey KEY_ROUND_PRIMARY = Internal.createUniqueKey(Round.ROUND, DSL.name("KEY_round_PRIMARY"), new TableField[] { Round.ROUND.ID }, true); + public static final UniqueKey KEY_TASK_QUEUE_PRIMARY = Internal.createUniqueKey(TaskQueue.TASK_QUEUE, DSL.name("KEY_task_queue_PRIMARY"), new TableField[] { TaskQueue.TASK_QUEUE.TASK_ID }, true); public static final UniqueKey KEY_TICKETS_PRIMARY = Internal.createUniqueKey(Tickets.TICKETS, DSL.name("KEY_tickets_PRIMARY"), new TableField[] { Tickets.TICKETS.ID }, true); public static final UniqueKey KEY_VPN_WHITELIST_PRIMARY = Internal.createUniqueKey(VpnWhitelist.VPN_WHITELIST, DSL.name("KEY_vpn_whitelist_PRIMARY"), new TableField[] { VpnWhitelist.VPN_WHITELIST.CKEY }, true); public static final UniqueKey KEY_WATCH_PRIMARY = Internal.createUniqueKey(Watch.WATCH, DSL.name("KEY_watch_PRIMARY"), new TableField[] { Watch.WATCH.CKEY }, true); diff --git a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/ParadiseGamedb.java b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/ParadiseGamedb.java index 59bd0e3..d5d8547 100644 --- a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/ParadiseGamedb.java +++ b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/ParadiseGamedb.java @@ -27,12 +27,12 @@ import me.aa07.paradise.taskdaemon.database.gamedb.tables.Library; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Memo; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Notes; -import me.aa07.paradise.taskdaemon.database.gamedb.tables.OauthTokens; import me.aa07.paradise.taskdaemon.database.gamedb.tables.PaiSaves; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Player; import me.aa07.paradise.taskdaemon.database.gamedb.tables.PlaytimeHistory; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Privacy; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Round; +import me.aa07.paradise.taskdaemon.database.gamedb.tables.TaskQueue; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Tickets; import me.aa07.paradise.taskdaemon.database.gamedb.tables.VpnWhitelist; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Watch; @@ -161,11 +161,6 @@ public class ParadiseGamedb extends SchemaImpl { */ public final Notes NOTES = Notes.NOTES; - /** - * The table paradise_gamedb.oauth_tokens. - */ - public final OauthTokens OAUTH_TOKENS = OauthTokens.OAUTH_TOKENS; - /** * The table paradise_gamedb.pai_saves. */ @@ -191,6 +186,11 @@ public class ParadiseGamedb extends SchemaImpl { */ public final Round ROUND = Round.ROUND; + /** + * The table paradise_gamedb.task_queue. + */ + public final TaskQueue TASK_QUEUE = TaskQueue.TASK_QUEUE; + /** * The table paradise_gamedb.tickets. */ @@ -243,12 +243,12 @@ public final List> getTables() { Library.LIBRARY, Memo.MEMO, Notes.NOTES, - OauthTokens.OAUTH_TOKENS, PaiSaves.PAI_SAVES, Player.PLAYER, PlaytimeHistory.PLAYTIME_HISTORY, Privacy.PRIVACY, Round.ROUND, + TaskQueue.TASK_QUEUE, Tickets.TICKETS, VpnWhitelist.VPN_WHITELIST, Watch.WATCH diff --git a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/Tables.java b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/Tables.java index 119cfe0..e3ca981 100644 --- a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/Tables.java +++ b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/Tables.java @@ -24,12 +24,12 @@ import me.aa07.paradise.taskdaemon.database.gamedb.tables.Library; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Memo; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Notes; -import me.aa07.paradise.taskdaemon.database.gamedb.tables.OauthTokens; import me.aa07.paradise.taskdaemon.database.gamedb.tables.PaiSaves; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Player; import me.aa07.paradise.taskdaemon.database.gamedb.tables.PlaytimeHistory; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Privacy; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Round; +import me.aa07.paradise.taskdaemon.database.gamedb.tables.TaskQueue; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Tickets; import me.aa07.paradise.taskdaemon.database.gamedb.tables.VpnWhitelist; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Watch; @@ -147,11 +147,6 @@ public class Tables { */ public static final Notes NOTES = Notes.NOTES; - /** - * The table paradise_gamedb.oauth_tokens. - */ - public static final OauthTokens OAUTH_TOKENS = OauthTokens.OAUTH_TOKENS; - /** * The table paradise_gamedb.pai_saves. */ @@ -177,6 +172,11 @@ public class Tables { */ public static final Round ROUND = Round.ROUND; + /** + * The table paradise_gamedb.task_queue. + */ + public static final TaskQueue TASK_QUEUE = TaskQueue.TASK_QUEUE; + /** * The table paradise_gamedb.tickets. */ diff --git a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/tables/OauthTokens.java b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/tables/OauthTokens.java deleted file mode 100644 index 1856b28..0000000 --- a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/tables/OauthTokens.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * This file is generated by jOOQ. - */ -package me.aa07.paradise.taskdaemon.database.gamedb.tables; - - -import java.util.Arrays; -import java.util.List; - -import me.aa07.paradise.taskdaemon.database.gamedb.Indexes; -import me.aa07.paradise.taskdaemon.database.gamedb.Keys; -import me.aa07.paradise.taskdaemon.database.gamedb.ParadiseGamedb; -import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.OauthTokensRecord; - -import org.jooq.Field; -import org.jooq.ForeignKey; -import org.jooq.Index; -import org.jooq.Name; -import org.jooq.Record; -import org.jooq.Row2; -import org.jooq.Schema; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.TableOptions; -import org.jooq.UniqueKey; -import org.jooq.impl.DSL; -import org.jooq.impl.SQLDataType; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class OauthTokens extends TableImpl { - - private static final long serialVersionUID = 1L; - - /** - * The reference instance of paradise_gamedb.oauth_tokens - */ - public static final OauthTokens OAUTH_TOKENS = new OauthTokens(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return OauthTokensRecord.class; - } - - /** - * The column paradise_gamedb.oauth_tokens.ckey. - */ - public final TableField CKEY = createField(DSL.name("ckey"), SQLDataType.VARCHAR(32).nullable(false), this, ""); - - /** - * The column paradise_gamedb.oauth_tokens.token. - */ - public final TableField TOKEN = createField(DSL.name("token"), SQLDataType.VARCHAR(32).nullable(false), this, ""); - - private OauthTokens(Name alias, Table aliased) { - this(alias, aliased, null); - } - - private OauthTokens(Name alias, Table aliased, Field[] parameters) { - super(alias, null, aliased, parameters, DSL.comment(""), TableOptions.table()); - } - - /** - * Create an aliased paradise_gamedb.oauth_tokens table - * reference - */ - public OauthTokens(String alias) { - this(DSL.name(alias), OAUTH_TOKENS); - } - - /** - * Create an aliased paradise_gamedb.oauth_tokens table - * reference - */ - public OauthTokens(Name alias) { - this(alias, OAUTH_TOKENS); - } - - /** - * Create a paradise_gamedb.oauth_tokens table reference - */ - public OauthTokens() { - this(DSL.name("oauth_tokens"), null); - } - - public OauthTokens(Table child, ForeignKey key) { - super(child, key, OAUTH_TOKENS); - } - - @Override - public Schema getSchema() { - return aliased() ? null : ParadiseGamedb.PARADISE_GAMEDB; - } - - @Override - public List getIndexes() { - return Arrays.asList(Indexes.OAUTH_TOKENS_CKEY); - } - - @Override - public UniqueKey getPrimaryKey() { - return Keys.KEY_OAUTH_TOKENS_PRIMARY; - } - - @Override - public OauthTokens as(String alias) { - return new OauthTokens(DSL.name(alias), this); - } - - @Override - public OauthTokens as(Name alias) { - return new OauthTokens(alias, this); - } - - /** - * Rename this table - */ - @Override - public OauthTokens rename(String name) { - return new OauthTokens(DSL.name(name), null); - } - - /** - * Rename this table - */ - @Override - public OauthTokens rename(Name name) { - return new OauthTokens(name, null); - } - - // ------------------------------------------------------------------------- - // Row2 type methods - // ------------------------------------------------------------------------- - - @Override - public Row2 fieldsRow() { - return (Row2) super.fieldsRow(); - } -} diff --git a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/tables/TaskQueue.java b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/tables/TaskQueue.java new file mode 100644 index 0000000..38aad85 --- /dev/null +++ b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/tables/TaskQueue.java @@ -0,0 +1,166 @@ +/* + * This file is generated by jOOQ. + */ +package me.aa07.paradise.taskdaemon.database.gamedb.tables; + + +import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +import me.aa07.paradise.taskdaemon.database.gamedb.Indexes; +import me.aa07.paradise.taskdaemon.database.gamedb.Keys; +import me.aa07.paradise.taskdaemon.database.gamedb.ParadiseGamedb; +import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.TaskQueueRecord; + +import org.jooq.Field; +import org.jooq.ForeignKey; +import org.jooq.Index; +import org.jooq.Name; +import org.jooq.Record; +import org.jooq.Row6; +import org.jooq.Schema; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.TableOptions; +import org.jooq.UniqueKey; +import org.jooq.impl.DSL; +import org.jooq.impl.SQLDataType; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class TaskQueue extends TableImpl { + + private static final long serialVersionUID = 1L; + + /** + * The reference instance of paradise_gamedb.task_queue + */ + public static final TaskQueue TASK_QUEUE = new TaskQueue(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return TaskQueueRecord.class; + } + + /** + * The column paradise_gamedb.task_queue.task_id. + */ + public final TableField TASK_ID = createField(DSL.name("task_id"), SQLDataType.UUID.nullable(false), this, ""); + + /** + * The column paradise_gamedb.task_queue.task_type. + */ + public final TableField TASK_TYPE = createField(DSL.name("task_type"), SQLDataType.VARCHAR(128).nullable(false), this, ""); + + /** + * The column paradise_gamedb.task_queue.task_arguments. + */ + public final TableField TASK_ARGUMENTS = createField(DSL.name("task_arguments"), SQLDataType.VARCHAR(128).nullable(false), this, ""); + + /** + * The column paradise_gamedb.task_queue.date_inserted. + */ + public final TableField DATE_INSERTED = createField(DSL.name("date_inserted"), SQLDataType.LOCALDATETIME(0).nullable(false), this, ""); + + /** + * The column paradise_gamedb.task_queue.date_processed. + */ + public final TableField DATE_PROCESSED = createField(DSL.name("date_processed"), SQLDataType.LOCALDATETIME(0).defaultValue(DSL.inline("NULL", SQLDataType.LOCALDATETIME)), this, ""); + + /** + * The column paradise_gamedb.task_queue.processed. + */ + public final TableField PROCESSED = createField(DSL.name("processed"), SQLDataType.TINYINT.nullable(false).defaultValue(DSL.inline("0", SQLDataType.TINYINT)), this, ""); + + private TaskQueue(Name alias, Table aliased) { + this(alias, aliased, null); + } + + private TaskQueue(Name alias, Table aliased, Field[] parameters) { + super(alias, null, aliased, parameters, DSL.comment(""), TableOptions.table()); + } + + /** + * Create an aliased paradise_gamedb.task_queue table reference + */ + public TaskQueue(String alias) { + this(DSL.name(alias), TASK_QUEUE); + } + + /** + * Create an aliased paradise_gamedb.task_queue table reference + */ + public TaskQueue(Name alias) { + this(alias, TASK_QUEUE); + } + + /** + * Create a paradise_gamedb.task_queue table reference + */ + public TaskQueue() { + this(DSL.name("task_queue"), null); + } + + public TaskQueue(Table child, ForeignKey key) { + super(child, key, TASK_QUEUE); + } + + @Override + public Schema getSchema() { + return aliased() ? null : ParadiseGamedb.PARADISE_GAMEDB; + } + + @Override + public List getIndexes() { + return Arrays.asList(Indexes.TASK_QUEUE_PROCESSED); + } + + @Override + public UniqueKey getPrimaryKey() { + return Keys.KEY_TASK_QUEUE_PRIMARY; + } + + @Override + public TaskQueue as(String alias) { + return new TaskQueue(DSL.name(alias), this); + } + + @Override + public TaskQueue as(Name alias) { + return new TaskQueue(alias, this); + } + + /** + * Rename this table + */ + @Override + public TaskQueue rename(String name) { + return new TaskQueue(DSL.name(name), null); + } + + /** + * Rename this table + */ + @Override + public TaskQueue rename(Name name) { + return new TaskQueue(name, null); + } + + // ------------------------------------------------------------------------- + // Row6 type methods + // ------------------------------------------------------------------------- + + @Override + public Row6 fieldsRow() { + return (Row6) super.fieldsRow(); + } +} diff --git a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/tables/records/OauthTokensRecord.java b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/tables/records/OauthTokensRecord.java deleted file mode 100644 index 1550d99..0000000 --- a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/tables/records/OauthTokensRecord.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * This file is generated by jOOQ. - */ -package me.aa07.paradise.taskdaemon.database.gamedb.tables.records; - - -import me.aa07.paradise.taskdaemon.database.gamedb.tables.OauthTokens; - -import org.jooq.Field; -import org.jooq.Record1; -import org.jooq.Record2; -import org.jooq.Row2; -import org.jooq.impl.UpdatableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class OauthTokensRecord extends UpdatableRecordImpl implements Record2 { - - private static final long serialVersionUID = 1L; - - /** - * Setter for paradise_gamedb.oauth_tokens.ckey. - */ - public void setCkey(String value) { - set(0, value); - } - - /** - * Getter for paradise_gamedb.oauth_tokens.ckey. - */ - public String getCkey() { - return (String) get(0); - } - - /** - * Setter for paradise_gamedb.oauth_tokens.token. - */ - public void setToken(String value) { - set(1, value); - } - - /** - * Getter for paradise_gamedb.oauth_tokens.token. - */ - public String getToken() { - return (String) get(1); - } - - // ------------------------------------------------------------------------- - // Primary key information - // ------------------------------------------------------------------------- - - @Override - public Record1 key() { - return (Record1) super.key(); - } - - // ------------------------------------------------------------------------- - // Record2 type implementation - // ------------------------------------------------------------------------- - - @Override - public Row2 fieldsRow() { - return (Row2) super.fieldsRow(); - } - - @Override - public Row2 valuesRow() { - return (Row2) super.valuesRow(); - } - - @Override - public Field field1() { - return OauthTokens.OAUTH_TOKENS.CKEY; - } - - @Override - public Field field2() { - return OauthTokens.OAUTH_TOKENS.TOKEN; - } - - @Override - public String component1() { - return getCkey(); - } - - @Override - public String component2() { - return getToken(); - } - - @Override - public String value1() { - return getCkey(); - } - - @Override - public String value2() { - return getToken(); - } - - @Override - public OauthTokensRecord value1(String value) { - setCkey(value); - return this; - } - - @Override - public OauthTokensRecord value2(String value) { - setToken(value); - return this; - } - - @Override - public OauthTokensRecord values(String value1, String value2) { - value1(value1); - value2(value2); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached OauthTokensRecord - */ - public OauthTokensRecord() { - super(OauthTokens.OAUTH_TOKENS); - } - - /** - * Create a detached, initialised OauthTokensRecord - */ - public OauthTokensRecord(String ckey, String token) { - super(OauthTokens.OAUTH_TOKENS); - - setCkey(ckey); - setToken(token); - } -} diff --git a/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/tables/records/TaskQueueRecord.java b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/tables/records/TaskQueueRecord.java new file mode 100644 index 0000000..2e6ad6e --- /dev/null +++ b/TaskDaemon.Database.GameDb/src/me/aa07/paradise/taskdaemon/database/gamedb/tables/records/TaskQueueRecord.java @@ -0,0 +1,295 @@ +/* + * This file is generated by jOOQ. + */ +package me.aa07.paradise.taskdaemon.database.gamedb.tables.records; + + +import java.time.LocalDateTime; +import java.util.UUID; + +import me.aa07.paradise.taskdaemon.database.gamedb.tables.TaskQueue; + +import org.jooq.Field; +import org.jooq.Record1; +import org.jooq.Record6; +import org.jooq.Row6; +import org.jooq.impl.UpdatableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class TaskQueueRecord extends UpdatableRecordImpl implements Record6 { + + private static final long serialVersionUID = 1L; + + /** + * Setter for paradise_gamedb.task_queue.task_id. + */ + public void setTaskId(UUID value) { + set(0, value); + } + + /** + * Getter for paradise_gamedb.task_queue.task_id. + */ + public UUID getTaskId() { + return (UUID) get(0); + } + + /** + * Setter for paradise_gamedb.task_queue.task_type. + */ + public void setTaskType(String value) { + set(1, value); + } + + /** + * Getter for paradise_gamedb.task_queue.task_type. + */ + public String getTaskType() { + return (String) get(1); + } + + /** + * Setter for paradise_gamedb.task_queue.task_arguments. + */ + public void setTaskArguments(String value) { + set(2, value); + } + + /** + * Getter for paradise_gamedb.task_queue.task_arguments. + */ + public String getTaskArguments() { + return (String) get(2); + } + + /** + * Setter for paradise_gamedb.task_queue.date_inserted. + */ + public void setDateInserted(LocalDateTime value) { + set(3, value); + } + + /** + * Getter for paradise_gamedb.task_queue.date_inserted. + */ + public LocalDateTime getDateInserted() { + return (LocalDateTime) get(3); + } + + /** + * Setter for paradise_gamedb.task_queue.date_processed. + */ + public void setDateProcessed(LocalDateTime value) { + set(4, value); + } + + /** + * Getter for paradise_gamedb.task_queue.date_processed. + */ + public LocalDateTime getDateProcessed() { + return (LocalDateTime) get(4); + } + + /** + * Setter for paradise_gamedb.task_queue.processed. + */ + public void setProcessed(Byte value) { + set(5, value); + } + + /** + * Getter for paradise_gamedb.task_queue.processed. + */ + public Byte getProcessed() { + return (Byte) get(5); + } + + // ------------------------------------------------------------------------- + // Primary key information + // ------------------------------------------------------------------------- + + @Override + public Record1 key() { + return (Record1) super.key(); + } + + // ------------------------------------------------------------------------- + // Record6 type implementation + // ------------------------------------------------------------------------- + + @Override + public Row6 fieldsRow() { + return (Row6) super.fieldsRow(); + } + + @Override + public Row6 valuesRow() { + return (Row6) super.valuesRow(); + } + + @Override + public Field field1() { + return TaskQueue.TASK_QUEUE.TASK_ID; + } + + @Override + public Field field2() { + return TaskQueue.TASK_QUEUE.TASK_TYPE; + } + + @Override + public Field field3() { + return TaskQueue.TASK_QUEUE.TASK_ARGUMENTS; + } + + @Override + public Field field4() { + return TaskQueue.TASK_QUEUE.DATE_INSERTED; + } + + @Override + public Field field5() { + return TaskQueue.TASK_QUEUE.DATE_PROCESSED; + } + + @Override + public Field field6() { + return TaskQueue.TASK_QUEUE.PROCESSED; + } + + @Override + public UUID component1() { + return getTaskId(); + } + + @Override + public String component2() { + return getTaskType(); + } + + @Override + public String component3() { + return getTaskArguments(); + } + + @Override + public LocalDateTime component4() { + return getDateInserted(); + } + + @Override + public LocalDateTime component5() { + return getDateProcessed(); + } + + @Override + public Byte component6() { + return getProcessed(); + } + + @Override + public UUID value1() { + return getTaskId(); + } + + @Override + public String value2() { + return getTaskType(); + } + + @Override + public String value3() { + return getTaskArguments(); + } + + @Override + public LocalDateTime value4() { + return getDateInserted(); + } + + @Override + public LocalDateTime value5() { + return getDateProcessed(); + } + + @Override + public Byte value6() { + return getProcessed(); + } + + @Override + public TaskQueueRecord value1(UUID value) { + setTaskId(value); + return this; + } + + @Override + public TaskQueueRecord value2(String value) { + setTaskType(value); + return this; + } + + @Override + public TaskQueueRecord value3(String value) { + setTaskArguments(value); + return this; + } + + @Override + public TaskQueueRecord value4(LocalDateTime value) { + setDateInserted(value); + return this; + } + + @Override + public TaskQueueRecord value5(LocalDateTime value) { + setDateProcessed(value); + return this; + } + + @Override + public TaskQueueRecord value6(Byte value) { + setProcessed(value); + return this; + } + + @Override + public TaskQueueRecord values(UUID value1, String value2, String value3, LocalDateTime value4, LocalDateTime value5, Byte value6) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached TaskQueueRecord + */ + public TaskQueueRecord() { + super(TaskQueue.TASK_QUEUE); + } + + /** + * Create a detached, initialised TaskQueueRecord + */ + public TaskQueueRecord(UUID taskId, String taskType, String taskArguments, LocalDateTime dateInserted, LocalDateTime dateProcessed, Byte processed) { + super(TaskQueue.TASK_QUEUE); + + setTaskId(taskId); + setTaskType(taskType); + setTaskArguments(taskArguments); + setDateInserted(dateInserted); + setDateProcessed(dateProcessed); + setProcessed(processed); + } +} diff --git a/config.toml.example b/config.toml.example index cb006f1..a97b7f0 100644 --- a/config.toml.example +++ b/config.toml.example @@ -31,6 +31,10 @@ orgName = "ParadiseSS13" reviewTeamSlug = "review-team" # Team name but with the dashes like "review-team" not "Review Team" reviewTeamToken = "your token here" # Review team gets a separate token because it needs org admin to get team members +[invisionConfig] +apiBaseUrl = "https://www.paradisestation.org/forum/api" +apiKey = "key goes here" + [ip2asn] host = "http://127.0.0.1:53661/v1/as/ip/" # Fill out URL - IP will be appended at the end