You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AuthenticationProcessor.kt 1.3KB

1234567891011121314151617181920212223242526272829
  1. package com.dmdirc.ktirc.messages.processors
  2. import com.dmdirc.ktirc.events.AuthenticationMessage
  3. import com.dmdirc.ktirc.events.SaslFinished
  4. import com.dmdirc.ktirc.events.SaslMechanismNotAvailableError
  5. import com.dmdirc.ktirc.messages.ERR_SASLFAIL
  6. import com.dmdirc.ktirc.messages.RPL_SASLMECHS
  7. import com.dmdirc.ktirc.messages.RPL_SASLSUCCESS
  8. import com.dmdirc.ktirc.model.IrcMessage
  9. internal class AuthenticationProcessor : MessageProcessor {
  10. override val commands = arrayOf("AUTHENTICATE", RPL_SASLSUCCESS, ERR_SASLFAIL, RPL_SASLMECHS)
  11. override fun process(message: IrcMessage) = when(message.command) {
  12. "AUTHENTICATE" -> listOf(AuthenticationMessage(message.metadata, message.authenticateArgument))
  13. RPL_SASLSUCCESS -> listOf(SaslFinished(message.metadata, true))
  14. ERR_SASLFAIL -> listOf(SaslFinished(message.metadata, false))
  15. RPL_SASLMECHS -> listOf(SaslMechanismNotAvailableError(message.metadata, message.mechanisms))
  16. else -> emptyList()
  17. }
  18. private val IrcMessage.authenticateArgument: String?
  19. get() = if (params.isEmpty() || params[0].size == 1 && String(params[0]) == "+") null else String(params[0])
  20. private val IrcMessage.mechanisms: List<String>
  21. get() = if (params.size < 2) emptyList() else String(params[1]).split(',')
  22. }