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.

SaslMechanism.kt 964B

1234567891011121314151617181920212223242526272829303132
  1. package com.dmdirc.ktirc.sasl
  2. import com.dmdirc.ktirc.IrcClient
  3. import com.dmdirc.ktirc.SaslConfig
  4. import com.dmdirc.ktirc.messages.sendAuthenticationMessage
  5. internal interface SaslMechanism {
  6. val ircName: String
  7. val priority: Int
  8. fun handleAuthenticationEvent(client: IrcClient, data: ByteArray?)
  9. }
  10. internal fun SaslConfig.createSaslMechanism(): List<SaslMechanism> = mechanisms.mapNotNull {
  11. when (it.toUpperCase()) {
  12. "SCRAM-SHA-1" -> ScramMechanism("SHA-1", 10, this)
  13. "SCRAM-SHA-256" -> ScramMechanism("SHA-256", 20, this)
  14. "EXTERNAL" -> ExternalMechanism()
  15. "PLAIN" -> PlainMechanism(this)
  16. else -> null
  17. }
  18. }
  19. internal fun IrcClient.sendAuthenticationData(data: String) {
  20. val lines = data.toByteArray().toBase64().chunked(400)
  21. lines.forEach(this::sendAuthenticationMessage)
  22. if (lines.last().length == 400) {
  23. sendAuthenticationMessage("+")
  24. }
  25. }