added permisssion request commands
This commit is contained in:
parent
5eb79935ba
commit
3a79834e4c
|
@ -25,7 +25,7 @@ class CommandMatterlink : CommandBase() {
|
||||||
throw WrongUsageException("Invalid command! Valid uses: ${this.getUsage(sender)}")
|
throw WrongUsageException("Invalid command! Valid uses: ${this.getUsage(sender)}")
|
||||||
}
|
}
|
||||||
|
|
||||||
val reply = CommandCore.execute(args)
|
val reply = CommandCore.execute(args, sender.name)
|
||||||
|
|
||||||
if (reply.isNotEmpty() && sender.sendCommandFeedback()) {
|
if (reply.isNotEmpty() && sender.sendCommandFeedback()) {
|
||||||
sender.sendMessage(TextComponentString(reply))
|
sender.sendMessage(TextComponentString(reply))
|
||||||
|
|
|
@ -25,7 +25,7 @@ class CommandMatterlink : CommandBase() {
|
||||||
throw WrongUsageException("Invalid command! Valid uses: ${this.getUsage(sender)}")
|
throw WrongUsageException("Invalid command! Valid uses: ${this.getUsage(sender)}")
|
||||||
}
|
}
|
||||||
|
|
||||||
val reply = CommandCore.execute(args)
|
val reply = CommandCore.execute(args, sender.name)
|
||||||
|
|
||||||
if (reply.isNotEmpty() && sender.sendCommandFeedback()) {
|
if (reply.isNotEmpty() && sender.sendCommandFeedback()) {
|
||||||
sender.sendMessage(TextComponentString(reply))
|
sender.sendMessage(TextComponentString(reply))
|
||||||
|
|
|
@ -25,7 +25,7 @@ class CommandMatterlink : CommandBase() {
|
||||||
throw WrongUsageException("Invalid command! Valid uses: ${this.getUsage(sender)}")
|
throw WrongUsageException("Invalid command! Valid uses: ${this.getUsage(sender)}")
|
||||||
}
|
}
|
||||||
|
|
||||||
val reply = CommandCore.execute(args)
|
val reply = CommandCore.execute(args, sender.name)
|
||||||
|
|
||||||
if (reply.isNotEmpty() && sender.sendCommandFeedback()) {
|
if (reply.isNotEmpty() && sender.sendCommandFeedback()) {
|
||||||
sender.sendMessage(TextComponentString(reply))
|
sender.sendMessage(TextComponentString(reply))
|
||||||
|
|
|
@ -12,7 +12,7 @@ class CommandMatterlink : CommandBase() {
|
||||||
throw WrongUsageException("Invalid command! Valid uses: ${this.getCommandUsage(sender)}")
|
throw WrongUsageException("Invalid command! Valid uses: ${this.getCommandUsage(sender)}")
|
||||||
}
|
}
|
||||||
|
|
||||||
val reply = CommandCore.execute(args)
|
val reply = CommandCore.execute(args, sender.commandSenderName)
|
||||||
|
|
||||||
if (reply.isNotEmpty()) {
|
if (reply.isNotEmpty()) {
|
||||||
sender.addChatMessage(ChatComponentText(reply))
|
sender.addChatMessage(ChatComponentText(reply))
|
||||||
|
|
|
@ -58,6 +58,7 @@ object BridgeCommandRegistry {
|
||||||
commandMap.clear()
|
commandMap.clear()
|
||||||
val permStatus = PermissionConfig.loadPermFile()
|
val permStatus = PermissionConfig.loadPermFile()
|
||||||
register("help", HelpCommand)
|
register("help", HelpCommand)
|
||||||
|
register("req", PermCommand)
|
||||||
val cmdStatus = CommandConfig.readConfig()
|
val cmdStatus = CommandConfig.readConfig()
|
||||||
CommandConfig.commands.forEach { (alias, command) ->
|
CommandConfig.commands.forEach { (alias, command) ->
|
||||||
register(alias, command)
|
register(alias, command)
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
package matterlink.bridge.command
|
||||||
|
|
||||||
|
import matterlink.api.ApiMessage
|
||||||
|
import matterlink.bridge.MessageHandlerInst
|
||||||
|
import matterlink.config.PermissionConfig
|
||||||
|
import matterlink.config.PermissionRequest
|
||||||
|
|
||||||
|
object PermCommand : IBridgeCommand {
|
||||||
|
override val help: String = "Requests permissions on the bridge. Syntax: req [powerlevel] [key]"
|
||||||
|
override val permLevel = 0.0
|
||||||
|
override fun execute(alias: String, user: String, userId: String, server: String, args: String): Boolean {
|
||||||
|
val argList = args.split(' ', limit = 2)
|
||||||
|
val requestedLevel = args.toDoubleOrNull() ?: 20.0
|
||||||
|
var unfilteredKey = user
|
||||||
|
var key = unfilteredKey.replace("[^A-Za-z0-9 ]".toRegex(), "").toLowerCase()
|
||||||
|
if (argList.size > 1) {
|
||||||
|
unfilteredKey = argList[1]
|
||||||
|
key = unfilteredKey.replace("[^A-Za-z0-9 ]".toRegex(), "").toLowerCase()
|
||||||
|
}
|
||||||
|
if (key.isBlank()) {
|
||||||
|
MessageHandlerInst.transmit(
|
||||||
|
ApiMessage(
|
||||||
|
text = "$unfilteredKey is made up of invalid characters.. please specifiy a key for tracking this request"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
} else if (PermissionConfig.permissionRequests.containsKey(key)) {
|
||||||
|
MessageHandlerInst.transmit(
|
||||||
|
ApiMessage(
|
||||||
|
text = "there is already a permission request for $key"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
val currentPowerlevel = IBridgeCommand.getPermLevel(userId, server)
|
||||||
|
if(currentPowerlevel < 0.0) {
|
||||||
|
MessageHandlerInst.transmit(
|
||||||
|
ApiMessage(
|
||||||
|
text = "Your poermission level is $currentPowerlevel seems like someone banned you from making any more requests"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageHandlerInst.transmit(
|
||||||
|
ApiMessage(
|
||||||
|
text = "requet for powerlevel $requestedLevel from user $user userID: $userId server: $server\n" +
|
||||||
|
"accept this by executing `bridge acceptPerm $key <level>`\n" +
|
||||||
|
"setting a negative level will prevent people from sending any more requests"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
PermissionConfig.permissionRequests[key.toLowerCase()] = PermissionRequest(user, server, userId, requestedLevel)
|
||||||
|
// PermissionConfig.add(server, userId, requestedlevel, "authorized by $user")
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ package matterlink.command
|
||||||
|
|
||||||
import matterlink.bridge.MessageHandlerInst
|
import matterlink.bridge.MessageHandlerInst
|
||||||
import matterlink.bridge.command.BridgeCommandRegistry
|
import matterlink.bridge.command.BridgeCommandRegistry
|
||||||
|
import matterlink.config.PermissionConfig
|
||||||
import matterlink.config.baseCfg
|
import matterlink.config.baseCfg
|
||||||
import matterlink.config.cfg
|
import matterlink.config.cfg
|
||||||
|
|
||||||
|
@ -10,9 +11,9 @@ object CommandCore {
|
||||||
|
|
||||||
fun getAliases() = listOf("BRIDGE", "bridge")
|
fun getAliases() = listOf("BRIDGE", "bridge")
|
||||||
|
|
||||||
fun getUsage() = "bridge <connect|disconnect|reload>"
|
fun getUsage() = "bridge <connect|disconnect|reload|acceptPerm>"
|
||||||
|
|
||||||
fun execute(args: Array<String>): String {
|
fun execute(args: Array<String>, user: String): String {
|
||||||
val cmd = args[0].toLowerCase()
|
val cmd = args[0].toLowerCase()
|
||||||
|
|
||||||
return when (cmd) {
|
return when (cmd) {
|
||||||
|
@ -33,6 +34,15 @@ object CommandCore {
|
||||||
MessageHandlerInst.start("Bridge reconnected", false)
|
MessageHandlerInst.start("Bridge reconnected", false)
|
||||||
"Bridge config reloaded!"
|
"Bridge config reloaded!"
|
||||||
}
|
}
|
||||||
|
"acceptperm" -> {
|
||||||
|
val key = args.getOrNull(1)?.toLowerCase() ?: return "No argument providing they request key"
|
||||||
|
val request = PermissionConfig.permissionRequests[key] ?: return "No request found for key $key"
|
||||||
|
val powerLevelArg = args.getOrNull(2)?.toDoubleOrNull()
|
||||||
|
val powerLevel = powerLevelArg ?: request.powerlevel ?: return "no powerLevel provided or it cannot be parsed"
|
||||||
|
PermissionConfig.add(request.platform, request.userId, powerLevel, "${request.user} Authorized by $user")
|
||||||
|
PermissionConfig.permissionRequests.remove(key)
|
||||||
|
"added ${request.user} (platform: ${request.platform} userId: ${request.userId}) with power level: $powerLevel"
|
||||||
|
}
|
||||||
else -> {
|
else -> {
|
||||||
"Invalid arguments for command!"
|
"Invalid arguments for command!"
|
||||||
}
|
}
|
||||||
|
|
|
@ -374,19 +374,18 @@ data class BaseConfig(val rootDir: File) {
|
||||||
MatterLinkConfig()
|
MatterLinkConfig()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// val defaultJsonObject = jankson.load("{}")
|
// val defaultJsonObject = jankson.load("{}")
|
||||||
// jankson.fromJson(defaultJsonObject, MatterLinkConfig::class.java)
|
// jankson.fromJson(defaultJsonObject, MatterLinkConfig::class.java)
|
||||||
// val nonDefault = jsonObject.getDelta(defaultJsonObject)
|
// val nonDefault = jsonObject.getDelta(defaultJsonObject)
|
||||||
|
|
||||||
MessageHandlerInst.config.url = cfg.connect.url
|
MessageHandlerInst.config.url = tmpCfg.connect.url
|
||||||
MessageHandlerInst.config.token = cfg.connect.authToken
|
MessageHandlerInst.config.token = tmpCfg.connect.authToken
|
||||||
MessageHandlerInst.config.gateway = cfg.connect.gateway
|
MessageHandlerInst.config.gateway = tmpCfg.connect.gateway
|
||||||
MessageHandlerInst.config.reconnectWait = cfg.connect.reconnectWait
|
MessageHandlerInst.config.reconnectWait = tmpCfg.connect.reconnectWait
|
||||||
|
|
||||||
MessageHandlerInst.config.systemUser = cfg.outgoing.systemUser
|
MessageHandlerInst.config.systemUser = tmpCfg.outgoing.systemUser
|
||||||
MessageHandlerInst.config.announceConnect = cfg.outgoing.announceConnect
|
MessageHandlerInst.config.announceConnect = tmpCfg.outgoing.announceConnect
|
||||||
MessageHandlerInst.config.announceDisconnect = cfg.outgoing.announceDisconnect
|
MessageHandlerInst.config.announceDisconnect = tmpCfg.outgoing.announceDisconnect
|
||||||
|
|
||||||
return tmpCfg
|
return tmpCfg
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,13 +4,22 @@ import blue.endless.jankson.Jankson
|
||||||
import blue.endless.jankson.JsonObject
|
import blue.endless.jankson.JsonObject
|
||||||
import blue.endless.jankson.impl.Marshaller
|
import blue.endless.jankson.impl.Marshaller
|
||||||
import blue.endless.jankson.impl.SyntaxError
|
import blue.endless.jankson.impl.SyntaxError
|
||||||
|
import matterlink.getOrDefault
|
||||||
import matterlink.instance
|
import matterlink.instance
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileNotFoundException
|
import java.io.FileNotFoundException
|
||||||
|
|
||||||
typealias PermissionMap = MutableMap<String, MutableMap<String, Double>>
|
typealias PermissionMap = MutableMap<String, MutableMap<String, Double>>
|
||||||
|
|
||||||
|
data class PermissionRequest(
|
||||||
|
val user: String,
|
||||||
|
val platform: String,
|
||||||
|
val userId: String,
|
||||||
|
val powerlevel: Double? = null
|
||||||
|
)
|
||||||
|
|
||||||
object PermissionConfig {
|
object PermissionConfig {
|
||||||
|
val permissionRequests = mutableMapOf<String, PermissionRequest>()
|
||||||
private val jankson = Jankson
|
private val jankson = Jankson
|
||||||
.builder()
|
.builder()
|
||||||
.build()
|
.build()
|
||||||
|
@ -27,10 +36,12 @@ object PermissionConfig {
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
var perms: PermissionMap = mutableMapOf()
|
val perms: PermissionMap = mutableMapOf()
|
||||||
private var jsonObject: JsonObject = JsonObject()
|
private var jsonObject: JsonObject = JsonObject()
|
||||||
|
|
||||||
fun loadPermFile(): Boolean {
|
fun loadPermFile(): Boolean {
|
||||||
|
permissionRequests.clear()
|
||||||
|
|
||||||
jsonObject = try {
|
jsonObject = try {
|
||||||
jankson.load(configFile)
|
jankson.load(configFile)
|
||||||
} catch (e: SyntaxError) {
|
} catch (e: SyntaxError) {
|
||||||
|
@ -45,7 +56,7 @@ object PermissionConfig {
|
||||||
val jsonUserMap = jsonObject.getOrDefault(platform, JsonObject())
|
val jsonUserMap = jsonObject.getOrDefault(platform, JsonObject())
|
||||||
if(jsonUserMap is JsonObject) {
|
if(jsonUserMap is JsonObject) {
|
||||||
userMap.forEach { user, (powerlevel, comment) ->
|
userMap.forEach { user, (powerlevel, comment) ->
|
||||||
instance.trace("loading platform: $platform user: $user powwerlevel: $powerlevel")
|
instance.trace("loading platform: $platform user: $user powerlevel: $powerlevel")
|
||||||
val element = Marshaller.getFallback().serialize(powerlevel)
|
val element = Marshaller.getFallback().serialize(powerlevel)
|
||||||
jsonUserMap.putDefault(user, element, comment.takeUnless { it.isBlank() })
|
jsonUserMap.putDefault(user, element, comment.takeUnless { it.isBlank() })
|
||||||
}
|
}
|
||||||
|
@ -70,4 +81,25 @@ object PermissionConfig {
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun add(platform: String, userid: String, powerlevel: Double, comment: String? = null) {
|
||||||
|
val platformObject = jsonObject.getObject(platform) ?: JsonObject()
|
||||||
|
platformObject.getOrDefault(userid, powerlevel, comment)
|
||||||
|
jsonObject[platform] = platformObject
|
||||||
|
|
||||||
|
perms.clear()
|
||||||
|
jsonObject.forEach { platform, jsonUserMap ->
|
||||||
|
val userMap = perms[platform] ?: mutableMapOf()
|
||||||
|
if (jsonUserMap is JsonObject) {
|
||||||
|
jsonUserMap.forEach { user, powerlevel ->
|
||||||
|
instance.info("$platform $user $powerlevel")
|
||||||
|
userMap[user] = jsonUserMap.get(Double::class.java, user) ?: 0.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
perms[platform] = userMap
|
||||||
|
}
|
||||||
|
instance.info("Permissions reloaded")
|
||||||
|
|
||||||
|
configFile.writeText(jsonObject.toJson(true, true))
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
mod_name = MatterLink
|
mod_name = MatterLink
|
||||||
mod_version = 1.6.1
|
mod_version = 1.6.2
|
||||||
forgelin_version = 1.6.0
|
forgelin_version = 1.6.0
|
||||||
curse_id = 287323
|
curse_id = 287323
|
||||||
curse_release_type = beta
|
curse_release_type = beta
|
Loading…
Reference in New Issue