1
1
package com.coder.gateway.views
2
2
3
3
import com.coder.gateway.CoderGatewayBundle
4
+ import com.coder.gateway.models.LoginModel
5
+ import com.coder.gateway.sdk.CoderClientService
6
+ import com.intellij.credentialStore.CredentialAttributes
7
+ import com.intellij.credentialStore.askPassword
4
8
import com.intellij.ide.IdeBundle
9
+ import com.intellij.openapi.Disposable
10
+ import com.intellij.openapi.application.ApplicationManager
11
+ import com.intellij.openapi.diagnostic.Logger
5
12
import com.intellij.openapi.ui.panel.ComponentPanelBuilder
6
13
import com.intellij.openapi.wm.impl.welcomeScreen.WelcomeScreenUIManager
7
14
import com.intellij.ui.IconManager
8
15
import com.intellij.ui.SeparatorComponent
9
16
import com.intellij.ui.components.panels.VerticalLayout
10
17
import com.intellij.ui.dsl.builder.BottomGap
18
+ import com.intellij.ui.dsl.builder.RightGap
11
19
import com.intellij.ui.dsl.builder.TopGap
20
+ import com.intellij.ui.dsl.builder.bindIntText
21
+ import com.intellij.ui.dsl.builder.bindText
12
22
import com.intellij.ui.dsl.builder.panel
13
23
import com.intellij.ui.dsl.gridLayout.HorizontalAlign
14
24
import com.intellij.util.ui.JBFont
15
25
import com.intellij.util.ui.JBUI
16
26
import com.intellij.util.ui.components.BorderLayoutPanel
17
27
import com.jetbrains.gateway.api.GatewayUI
28
+ import kotlinx.coroutines.CoroutineScope
29
+ import kotlinx.coroutines.Dispatchers
30
+ import kotlinx.coroutines.cancel
31
+ import kotlinx.coroutines.launch
32
+ import kotlinx.coroutines.withContext
18
33
import java.awt.Component
19
34
import javax.swing.JButton
20
35
import javax.swing.JPanel
21
36
22
- class CoderGatewayLoginView : BorderLayoutPanel () {
37
+ class CoderGatewayLoginView : BorderLayoutPanel (), Disposable {
38
+ private val logger = Logger .getInstance(CoderClientService ::class .java)
39
+ private val cs = CoroutineScope (Dispatchers .Main )
40
+ private val model = LoginModel ()
41
+ private val coderClient: CoderClientService = ApplicationManager .getApplication().getService(CoderClientService ::class .java)
42
+
23
43
init {
24
44
initView()
25
45
}
@@ -45,17 +65,35 @@ class CoderGatewayLoginView : BorderLayoutPanel() {
45
65
row {
46
66
browserLink(CoderGatewayBundle .message(" gateway.connector.view.login.documentation.action" ), " https://coder.com/docs/coder/latest/workspaces" )
47
67
}.bottomGap(BottomGap .MEDIUM )
48
- row {
49
- label(CoderGatewayBundle .message(" gateway.connector.view.login.url.label" ))
50
- textField().resizableColumn().horizontalAlign(HorizontalAlign .FILL ).applyToComponent {
51
- text = " https://dev.coder.com"
52
- }
53
- button(CoderGatewayBundle .message(" gateway.connector.view.login.connect.action" ), {}).applyToComponent {
68
+ row(CoderGatewayBundle .message(" gateway.connector.view.login.host.label" )) {
69
+ textField().resizableColumn().horizontalAlign(HorizontalAlign .FILL ).gap(RightGap .SMALL ).bindText(model::host)
70
+ intTextField(0 .. 65536 ).bindIntText(model::port).label(CoderGatewayBundle .message(" gateway.connector.view.login.port.label" ))
71
+ button(CoderGatewayBundle .message(" gateway.connector.view.login.connect.action" )) {
72
+ model.password = askPassword(
73
+ null ,
74
+ CoderGatewayBundle .message(" gateway.connector.view.login.credentials.dialog.title" ),
75
+ CoderGatewayBundle .message(" gateway.connector.view.login.password.label" ),
76
+ CredentialAttributes (" Coder" ),
77
+ false
78
+ )
79
+ cs.launch {
80
+ withContext(Dispatchers .IO ) {
81
+ coderClient.initClientSession(model.host, model.port, model.email, model.password!! )
82
+ }
83
+ logger.info(" Session token:${coderClient.sessionToken} " )
84
+ }
85
+
86
+ }.applyToComponent {
54
87
background = WelcomeScreenUIManager .getMainAssociatedComponentBackground()
55
88
border = JBUI .Borders .empty(3 , 3 , 3 , 3 )
56
89
}
57
90
cell()
58
91
}
92
+
93
+ row(CoderGatewayBundle .message(" gateway.connector.view.login.email.label" )) {
94
+ textField().resizableColumn().bindText(model::email)
95
+ cell()
96
+ }
59
97
}
60
98
}.apply {
61
99
background = WelcomeScreenUIManager .getMainAssociatedComponentBackground()
@@ -80,5 +118,8 @@ class CoderGatewayLoginView : BorderLayoutPanel() {
80
118
}
81
119
}
82
120
121
+ override fun dispose () {
122
+ cs.cancel()
123
+ }
124
+ }
83
125
84
- }
0 commit comments