forked from SteamWar/SteamWar
Migrate Token class to Kotlin, remove outdated Java implementation, and refactor references across modules. Update timestamp fields to use CurrentTimestamp where applicable.
Signed-off-by: Chaoscaot <max@maxsp.de>
This commit is contained in:
@@ -53,7 +53,8 @@ class Punishment(id: EntityID<Int>) : IntEntity(id) {
|
||||
|
||||
@JvmStatic
|
||||
fun getPunsihmentOfPlayer(user: Int, type: PunishmentType) = useDb {
|
||||
find { (PunishmentTable.userId eq user) and (PunishmentTable.type eq type) }.orderBy(PunishmentTable.id to SortOrder.DESC).firstOrNull()
|
||||
find { (PunishmentTable.userId eq user) and (PunishmentTable.type eq type) }.orderBy(PunishmentTable.id to SortOrder.DESC)
|
||||
.firstOrNull()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@@ -61,8 +62,8 @@ class Punishment(id: EntityID<Int>) : IntEntity(id) {
|
||||
find {
|
||||
PunishmentTable.id inSubQuery PunishmentTable.select(PunishmentTable.id.max())
|
||||
.where { PunishmentTable.userId eq user }.groupBy(
|
||||
PunishmentTable.type
|
||||
)
|
||||
PunishmentTable.type
|
||||
)
|
||||
}.associateBy { it.type }.toMutableMap()
|
||||
}
|
||||
|
||||
@@ -130,17 +131,19 @@ class Punishment(id: EntityID<Int>) : IntEntity(id) {
|
||||
val playerMessageUntil: String?,
|
||||
val usageNotPunished: String?,
|
||||
val unpunishmentMessage: String?,
|
||||
val userPerm: UserPerm,
|
||||
val multi: Boolean = false
|
||||
) {
|
||||
Ban(false, "BAN_TEAM", "BAN_PERMA", "BAN_UNTIL", "UNBAN_ERROR", "UNBAN"),
|
||||
Mute(false, "MUTE_TEAM", "MUTE_PERMA", "MUTE_UNTIL", "UNMUTE_ERROR", "UNMUTE"),
|
||||
Ban(false, "BAN_TEAM", "BAN_PERMA", "BAN_UNTIL", "UNBAN_ERROR", "UNBAN", UserPerm.TEAM),
|
||||
Mute(false, "MUTE_TEAM", "MUTE_PERMA", "MUTE_UNTIL", "UNMUTE_ERROR", "UNMUTE", UserPerm.TEAM),
|
||||
NoSchemReceiving(
|
||||
true,
|
||||
"NOSCHEMRECEIVING_TEAM",
|
||||
"NOSCHEMRECEIVING_PERMA",
|
||||
"NOSCHEMRECEIVING_UNTIL",
|
||||
"UNNOSCHEMRECEIVING_ERROR",
|
||||
"UNNOSCHEMRECEIVING"
|
||||
"UNNOSCHEMRECEIVING",
|
||||
UserPerm.MODERATION
|
||||
),
|
||||
NoSchemSharing(
|
||||
true,
|
||||
@@ -148,7 +151,8 @@ class Punishment(id: EntityID<Int>) : IntEntity(id) {
|
||||
"NOSCHEMSHARING_PERMA",
|
||||
"NOSCHEMSHARING_UNTIL",
|
||||
"UNNOSCHEMSHARING_ERROR",
|
||||
"UNNOSCHEMSHARING"
|
||||
"UNNOSCHEMSHARING",
|
||||
UserPerm.MODERATION
|
||||
),
|
||||
NoSchemSubmitting(
|
||||
false,
|
||||
@@ -156,7 +160,8 @@ class Punishment(id: EntityID<Int>) : IntEntity(id) {
|
||||
"NOSCHEMSUBMITTING_PERMA",
|
||||
"NOSCHEMSUBMITTING_UNTIL",
|
||||
"UNNOSCHEMSUBMITTING_ERROR",
|
||||
"UNNOSCHEMSUBMITTING"
|
||||
"UNNOSCHEMSUBMITTING",
|
||||
UserPerm.TEAM
|
||||
),
|
||||
NoDevServer(
|
||||
true,
|
||||
@@ -164,7 +169,8 @@ class Punishment(id: EntityID<Int>) : IntEntity(id) {
|
||||
"NODEVSERVER_PERMA",
|
||||
"NODEVSERVER_UNTIL",
|
||||
"UNNODEVSERVER_ERROR",
|
||||
"UNNODEVSERVER"
|
||||
"UNNODEVSERVER",
|
||||
UserPerm.PREFIX_DEVELOPER
|
||||
),
|
||||
NoFightServer(
|
||||
true,
|
||||
@@ -172,7 +178,8 @@ class Punishment(id: EntityID<Int>) : IntEntity(id) {
|
||||
"NOFIGHTSERVER_PERMA",
|
||||
"NOFIGHTSERVER_UNTIL",
|
||||
"UNNOFIGHTSERVER_ERROR",
|
||||
"UNNOFIGHTSERVER"
|
||||
"UNNOFIGHTSERVER",
|
||||
UserPerm.MODERATION
|
||||
),
|
||||
NoTeamServer(
|
||||
true,
|
||||
@@ -180,9 +187,10 @@ class Punishment(id: EntityID<Int>) : IntEntity(id) {
|
||||
"NOTEAMSERVER_PERMA",
|
||||
"NOTEAMSERVER_UNTIL",
|
||||
"UNNOTEAMSERVER_ERROR",
|
||||
"UNNOTEAMSERVER"
|
||||
"UNNOTEAMSERVER",
|
||||
UserPerm.MODERATION
|
||||
),
|
||||
Note(false, "NOTE_TEAM", null, null, null, null, true);
|
||||
Note(false, "NOTE_TEAM", null, null, null, null, UserPerm.TEAM, true);
|
||||
|
||||
fun isNeedsAdmin() = needsAdmin
|
||||
fun isMulti() = multi
|
||||
|
||||
@@ -21,6 +21,7 @@ package de.steamwar.sql
|
||||
|
||||
import de.steamwar.sql.internal.useDb
|
||||
import org.jetbrains.exposed.v1.core.dao.id.IntIdTable
|
||||
import org.jetbrains.exposed.v1.javatime.CurrentTimestamp
|
||||
import org.jetbrains.exposed.v1.javatime.timestamp
|
||||
import org.jetbrains.exposed.v1.jdbc.insert
|
||||
import org.jetbrains.exposed.v1.jdbc.insertAndGetId
|
||||
@@ -28,7 +29,7 @@ import java.io.File
|
||||
import java.time.Instant
|
||||
|
||||
object ExceptionTable: IntIdTable("Exception") {
|
||||
val time = timestamp("Time").default(Instant.now())
|
||||
val time = timestamp("Time").defaultExpression(CurrentTimestamp)
|
||||
val server = text("Server")
|
||||
val message = text("Message")
|
||||
val stackTrace = text("StackTrace")
|
||||
@@ -39,6 +40,9 @@ class SWException {
|
||||
val cwd = System.getProperty("user.dir")
|
||||
val serverName = File(cwd).name
|
||||
|
||||
@JvmStatic
|
||||
fun init() = Unit
|
||||
|
||||
@JvmStatic
|
||||
fun log(message: String, stacktrace: String) = useDb {
|
||||
ExceptionTable.insert {
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.jetbrains.exposed.v1.core.dao.id.EntityID
|
||||
import org.jetbrains.exposed.v1.core.dao.id.IntIdTable
|
||||
import org.jetbrains.exposed.v1.dao.IntEntity
|
||||
import org.jetbrains.exposed.v1.dao.IntEntityClass
|
||||
import org.jetbrains.exposed.v1.javatime.CurrentTimestamp
|
||||
import org.jetbrains.exposed.v1.javatime.timestamp
|
||||
import org.jetbrains.exposed.v1.jdbc.insertAndGetId
|
||||
import java.sql.Timestamp
|
||||
@@ -36,7 +37,7 @@ object SchematicNodeTable : IntIdTable("SchematicNode", "NodeId") {
|
||||
val owner = reference("NodeOwner", SteamwarUserTable)
|
||||
val name = varchar("NodeName", 64)
|
||||
val parent = optReference("ParentNode", SchematicNodeTable)
|
||||
val lastUpdate = timestamp("LastUpdate")
|
||||
val lastUpdate = timestamp("LastUpdate").defaultExpression(CurrentTimestamp)
|
||||
val item = text("NodeItem")
|
||||
val type = varchar("NodeType", 16).nullable()
|
||||
val config = integer("Config")
|
||||
|
||||
@@ -22,6 +22,7 @@ package de.steamwar.sql
|
||||
import de.steamwar.sql.internal.useDb
|
||||
import org.jetbrains.exposed.v1.core.Table
|
||||
import org.jetbrains.exposed.v1.core.dao.id.EntityID
|
||||
import org.jetbrains.exposed.v1.javatime.CurrentTimestamp
|
||||
import org.jetbrains.exposed.v1.javatime.timestamp
|
||||
import org.jetbrains.exposed.v1.jdbc.insert
|
||||
import java.sql.Timestamp
|
||||
@@ -30,7 +31,7 @@ import java.time.Instant
|
||||
object SessionTable: Table("Session") {
|
||||
val userId = reference("UserId", SteamwarUserTable)
|
||||
val startTime = timestamp("StartTime")
|
||||
val endTime = timestamp("EndTime").default(Instant.now())
|
||||
val endTime = timestamp("EndTime").defaultExpression(CurrentTimestamp)
|
||||
}
|
||||
|
||||
class Session {
|
||||
|
||||
@@ -73,12 +73,12 @@ class TeamTeilnahme(id: EntityID<CompositeID>) : CompositeEntity(id) {
|
||||
|
||||
@JvmStatic
|
||||
fun getTeams(eventId: Int) = useDb {
|
||||
find { TeamTeilnahmeTable.eventId eq eventId }.map { it.teamId }
|
||||
find { TeamTeilnahmeTable.eventId eq eventId }.map { Team.byId(it.teamId.value) }.toSet()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getEvents(teamId: Int) = useDb {
|
||||
find { TeamTeilnahmeTable.teamId eq teamId }.map { it.eventId }
|
||||
find { TeamTeilnahmeTable.teamId eq teamId }.map { Event.byId(it.eventId.value) }.toSet()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2025 SteamWar.de-Serverteam
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.sql;
|
||||
|
||||
import de.steamwar.sql.internal.Field;
|
||||
import de.steamwar.sql.internal.SelectStatement;
|
||||
import de.steamwar.sql.internal.Statement;
|
||||
import de.steamwar.sql.internal.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.security.MessageDigest;
|
||||
import java.security.SecureRandom;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.Base64;
|
||||
import java.util.List;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
@ToString
|
||||
public class Token {
|
||||
private static final Table<Token> table = new Table<>(Token.class);
|
||||
private static final Statement insert = table.insertFields(true, "Name", "Owner", "Hash");
|
||||
private static final SelectStatement<Token> get = table.select(Table.PRIMARY);
|
||||
private static final SelectStatement<Token> listUser = table.selectFields("owner");
|
||||
private static final SelectStatement<Token> getHash = table.selectFields("hash");
|
||||
private static final Statement delete = table.delete(Table.PRIMARY);
|
||||
|
||||
@SneakyThrows
|
||||
private static String getHash(String code) {
|
||||
return Base64.getEncoder().encodeToString(MessageDigest.getInstance("SHA-512").digest(code.getBytes()));
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public static String createToken(String name, SteamwarUser owner) {
|
||||
SecureRandom random = new SecureRandom();
|
||||
byte[] bytes = new byte[20];
|
||||
random.nextBytes(bytes);
|
||||
|
||||
String code = Base64.getEncoder().encodeToString(bytes);
|
||||
|
||||
String hash = getHash(code);
|
||||
create(name, owner, hash);
|
||||
return code;
|
||||
}
|
||||
|
||||
public static Token getTokenByCode(String code) {
|
||||
String hash = getHash(code);
|
||||
return get(hash);
|
||||
}
|
||||
|
||||
public static Token create(String name, SteamwarUser owner, String hash) {
|
||||
int id = insert.insertGetKey(name, owner, hash);
|
||||
return get(id);
|
||||
}
|
||||
|
||||
public static Token get(int id) {
|
||||
return get.select(id);
|
||||
}
|
||||
|
||||
public static List<Token> listUser(SteamwarUser owner) {
|
||||
return listUser.listSelect(owner);
|
||||
}
|
||||
|
||||
public static Token get(String hash) {
|
||||
return getHash.select(hash);
|
||||
}
|
||||
|
||||
public static void delete(Token id) {
|
||||
delete.update(id.getId());
|
||||
}
|
||||
|
||||
@Field(keys = Table.PRIMARY, autoincrement = true)
|
||||
private final int id;
|
||||
@Field(keys = "NameOwner")
|
||||
private final String name;
|
||||
@Field(keys = "NameOwner")
|
||||
private final int owner;
|
||||
@Field
|
||||
private final Timestamp created;
|
||||
@Field
|
||||
private final String hash;
|
||||
|
||||
public void delete() {
|
||||
delete(this);
|
||||
}
|
||||
|
||||
public SteamwarUser getOwner() {
|
||||
return SteamwarUser.byId(owner);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2025 SteamWar.de-Serverteam
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.sql
|
||||
|
||||
import de.steamwar.sql.internal.useDb
|
||||
import org.jetbrains.exposed.v1.core.dao.id.EntityID
|
||||
import org.jetbrains.exposed.v1.core.dao.id.IntIdTable
|
||||
import org.jetbrains.exposed.v1.core.eq
|
||||
import org.jetbrains.exposed.v1.dao.IntEntity
|
||||
import org.jetbrains.exposed.v1.dao.IntEntityClass
|
||||
import org.jetbrains.exposed.v1.javatime.CurrentTimestamp
|
||||
import org.jetbrains.exposed.v1.javatime.timestamp
|
||||
import java.security.MessageDigest
|
||||
import java.security.SecureRandom
|
||||
import java.sql.Timestamp
|
||||
import java.time.Instant
|
||||
import java.util.Base64
|
||||
|
||||
object TokenTable: IntIdTable("Token") {
|
||||
val name = varchar("Name", 64)
|
||||
val owner = reference("Owner", SteamwarUserTable)
|
||||
val created = timestamp("Created").defaultExpression(CurrentTimestamp)
|
||||
val hash = varchar("Hash", 88)
|
||||
}
|
||||
|
||||
class Token(id: EntityID<Int>): IntEntity(id) {
|
||||
companion object : IntEntityClass<Token>(TokenTable) {
|
||||
private fun getHash(code: String) = Base64.getEncoder().encodeToString(MessageDigest.getInstance("SHA-512").digest(code.toByteArray()))
|
||||
|
||||
@JvmStatic
|
||||
fun createToken(name: String, owner: SteamwarUser): String {
|
||||
val random = SecureRandom();
|
||||
val bytes = ByteArray(20)
|
||||
random.nextBytes(bytes)
|
||||
|
||||
val code = Base64.getEncoder().encodeToString(bytes)
|
||||
|
||||
val hash = getHash(code)
|
||||
|
||||
useDb {
|
||||
new {
|
||||
this.name = name
|
||||
this.owner = owner
|
||||
this.hash = hash
|
||||
}
|
||||
}
|
||||
|
||||
return code
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getTokenByCode(code: String) = get(getHash(code))
|
||||
|
||||
@JvmStatic
|
||||
fun get(hash: String) = useDb {
|
||||
find { TokenTable.hash eq hash }.firstOrNull()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun listUser(user: SteamwarUser) = useDb {
|
||||
find { TokenTable.owner eq user.id }.toList()
|
||||
}
|
||||
}
|
||||
|
||||
var name by TokenTable.name
|
||||
private set
|
||||
var owner by SteamwarUser referencedOn TokenTable.owner
|
||||
private set
|
||||
var created by TokenTable.created.transform({ it.toInstant() }, { Timestamp.from(it) })
|
||||
private set
|
||||
var hash by TokenTable.hash
|
||||
private set
|
||||
|
||||
override fun delete() = useDb {
|
||||
super.delete()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user