@@ -2,6 +2,7 @@ package coderd
2
2
3
3
import (
4
4
"crypto/subtle"
5
+ "database/sql"
5
6
"encoding/json"
6
7
"net/http"
7
8
@@ -11,6 +12,7 @@ import (
11
12
scimjson "github.com/imulab/go-scim/pkg/v2/json"
12
13
"github.com/imulab/go-scim/pkg/v2/service"
13
14
"github.com/imulab/go-scim/pkg/v2/spec"
15
+ "golang.org/x/xerrors"
14
16
15
17
agpl "github.com/coder/coder/coderd"
16
18
"github.com/coder/coder/coderd/database"
@@ -152,6 +154,23 @@ func (api *API) scimPostUser(rw http.ResponseWriter, r *http.Request) {
152
154
return
153
155
}
154
156
157
+ //nolint:gocritic
158
+ user , err := api .Database .GetUserByEmailOrUsername (dbauthz .AsSystemRestricted (ctx ), database.GetUserByEmailOrUsernameParams {
159
+ Email : email ,
160
+ Username : sUser .UserName ,
161
+ })
162
+ if err != nil && ! xerrors .Is (err , sql .ErrNoRows ) {
163
+ _ = handlerutil .WriteError (rw , err )
164
+ return
165
+ }
166
+ if err == nil {
167
+ sUser .ID = user .ID .String ()
168
+ sUser .UserName = user .Username
169
+
170
+ httpapi .Write (ctx , rw , http .StatusOK , sUser )
171
+ return
172
+ }
173
+
155
174
// The username is a required property in Coder. We make a best-effort
156
175
// attempt at using what the claims provide, but if that fails we will
157
176
// generate a random username.
@@ -182,7 +201,7 @@ func (api *API) scimPostUser(rw http.ResponseWriter, r *http.Request) {
182
201
}
183
202
184
203
//nolint:gocritic // needed for SCIM
185
- user , _ , err : = api .AGPL .CreateUser (dbauthz .AsSystemRestricted (ctx ), api .Database , agpl.CreateUserRequest {
204
+ user , _ , err = api .AGPL .CreateUser (dbauthz .AsSystemRestricted (ctx ), api .Database , agpl.CreateUserRequest {
186
205
CreateUserRequest : codersdk.CreateUserRequest {
187
206
Username : sUser .UserName ,
188
207
Email : email ,
0 commit comments