1+ package org.digma.intellij.plugin.auth
2+
3+ import com.intellij.openapi.diagnostic.Logger
4+ import org.digma.intellij.plugin.analytics.AuthenticationException
5+ import org.digma.intellij.plugin.analytics.RestAnalyticsProvider
6+ import org.digma.intellij.plugin.auth.account.DigmaAccount
7+ import org.digma.intellij.plugin.auth.account.DigmaDefaultAccountHolder
8+ import org.digma.intellij.plugin.common.ExceptionUtils
9+ import org.digma.intellij.plugin.errorreporting.ErrorReporter
10+ import org.digma.intellij.plugin.log.Log
11+
12+ abstract class AbstractLoginHandler (protected val analyticsProvider : RestAnalyticsProvider ) : LoginHandler {
13+
14+ override val logger: Logger = Logger .getInstance(this ::class .java)
15+
16+ protected val authApiClient = AuthApiClient (analyticsProvider)
17+
18+ protected fun defaultAccountExists (): Boolean {
19+ return DigmaDefaultAccountHolder .getInstance().account != null
20+ }
21+
22+ protected fun getDefaultAccount (): DigmaAccount ? {
23+ return DigmaDefaultAccountHolder .getInstance().account
24+ }
25+
26+
27+ override fun login (user : String , password : String ): LoginResult {
28+
29+ return try {
30+
31+ reportPosthogEvent(" login" , mapOf (" user" to user))
32+
33+ Log .log(logger::trace, " login called for url {}, user {}" , analyticsProvider.apiUrl, user)
34+
35+ if (defaultAccountExists()) {
36+ Log .log(logger::trace, " default account exists, deleting before login, {}" , getDefaultAccount())
37+ logout()
38+ }
39+
40+ Log .log(logger::trace, " doing login for url {}, user {}" , analyticsProvider.apiUrl, user)
41+
42+ val loginResult = authApiClient.login(user, password)
43+
44+ Log .log(logger::trace, " login success for url {}, user {}, created account {}" , analyticsProvider.apiUrl, user, getDefaultAccount())
45+
46+ reportPosthogEvent(" login success" , mapOf (" user" to user))
47+
48+ loginResult
49+
50+ } catch (e: Throwable ) {
51+
52+ if (e is AuthenticationException ) {
53+ Log .warnWithException(logger, e, " Exception in login, url {}" , analyticsProvider.apiUrl)
54+ ErrorReporter .getInstance().reportError(" AuthManager.login" , e)
55+ val errorMessage = ExceptionUtils .getNonEmptyMessage(e)
56+ reportPosthogEvent(" login failed" , mapOf (" user" to user, " error" to errorMessage.toString()))
57+ // return no success LoginResult
58+ LoginResult (false , null , e.detailedMessage)
59+ }
60+
61+ // don't report connection errors, there is no point, backend may be down and that happens a lot
62+ if (! ExceptionUtils .isAnyConnectionException(e)) {
63+ Log .warnWithException(logger, e, " Exception in login, url {}" , analyticsProvider.apiUrl)
64+ ErrorReporter .getInstance().reportError(" AuthManager.login" , e)
65+ }
66+
67+ LoginResult (false , null , ExceptionUtils .getNonEmptyMessage(e))
68+
69+ }
70+ }
71+
72+ }
0 commit comments