@@ -137,6 +137,20 @@ func (c *external) Observe(ctx context.Context, mg resource.Managed) (managed.Ex
137137 }
138138
139139 var name string
140+ var query string
141+ var userType string
142+ if cr .Spec .ForProvider .Type == nil {
143+ userType = v1alpha1 .UserTypeLocal
144+ } else {
145+ userType = * cr .Spec .ForProvider .Type
146+ }
147+ switch userType {
148+ case v1alpha1 .UserTypeAD :
149+ query = "SELECT name FROM sys.database_principals WHERE type IN ('E','X') AND name = @p1"
150+ case v1alpha1 .UserTypeLocal :
151+ query = "SELECT name FROM sys.database_principals WHERE type = 'S' AND name = @p1"
152+ default :
153+ return managed.ExternalObservation {}, errors .Errorf ("Type '%s' is not valid" , * cr .Spec .ForProvider .Type )
140154
141155 query := "SELECT name FROM sys.database_principals WHERE type = 'S' AND name = @p1"
142156 err := c .db .Scan (ctx , xsql.Query {
@@ -170,9 +184,17 @@ func (c *external) Create(ctx context.Context, mg resource.Managed) (managed.Ext
170184 return managed.ExternalCreation {}, errors .New (errNotUser )
171185 }
172186 var query string
173- var pw string
174- if t := cr .Spec .ForProvider .Type ; t == nil || * t != "AD" {
175-
187+ var outPw string
188+ var userType string
189+ if cr .Spec .ForProvider .Type == nil {
190+ userType = v1alpha1 .UserTypeLocal
191+ } else {
192+ userType = * cr .Spec .ForProvider .Type
193+ }
194+ switch userType {
195+ case v1alpha1 .UserTypeAD :
196+ query = fmt .Sprintf ("CREATE USER %s FROM EXTERNAL PROVIDER" , mssql .QuoteIdentifier (meta .GetExternalName (cr )))
197+ case v1alpha1 .UserTypeLocal :
176198 pw , _ , err := c .getPassword (ctx , cr )
177199 if err != nil {
178200 return managed.ExternalCreation {}, err
@@ -183,10 +205,10 @@ func (c *external) Create(ctx context.Context, mg resource.Managed) (managed.Ext
183205 return managed.ExternalCreation {}, err
184206 }
185207 }
186-
208+ outPw = pw
187209 query = fmt .Sprintf ("CREATE USER %s WITH PASSWORD=%s" , mssql .QuoteIdentifier (meta .GetExternalName (cr )), mssql .QuoteValue (pw ))
188- } else {
189- query = fmt . Sprintf ( "CREATE USER %s " , mssql . QuoteIdentifier ( meta . GetExternalName ( cr )) )
210+ default :
211+ return managed. ExternalCreation {}, errors . Errorf ( "Type '%s' is not valid " , * cr . Spec . ForProvider . Type )
190212
191213 }
192214
@@ -205,7 +227,7 @@ func (c *external) Create(ctx context.Context, mg resource.Managed) (managed.Ext
205227 }
206228
207229 return managed.ExternalCreation {
208- ConnectionDetails : c .db .GetConnectionDetails (meta .GetExternalName (cr ), pw ),
230+ ConnectionDetails : c .db .GetConnectionDetails (meta .GetExternalName (cr ), outPw ),
209231 }, nil
210232}
211233
0 commit comments