1 package resolver
2
3
4
5
6
7 import (
8 "context"
9 "fmt"
10
11 "edge-infra.dev/pkg/edge/api/graph/mapper"
12 "edge-infra.dev/pkg/edge/api/graph/model"
13 "edge-infra.dev/pkg/edge/api/middleware"
14 "edge-infra.dev/pkg/edge/api/utils"
15 "edge-infra.dev/pkg/edge/bsl"
16 "edge-infra.dev/pkg/edge/constants/api/banner"
17 )
18
19
20 func (r *mutationResolver) Register(ctx context.Context, firstName string, lastName string, username string, email string, password string, organization string) (string, error) {
21 organization = bsl.TrimOrg(organization)
22 _, err := r.TenantService.GetByName(ctx, organization)
23 if err != nil {
24 return "", fmt.Errorf("organization %s, does not exist", organization)
25 }
26 authPayload, err := r.UserManagementService.Register(ctx, firstName, lastName, username, email, password, organization)
27 if err != nil {
28 return authPayload, err
29 }
30 err = r.RoleService.AddRoleToUserLegacy(ctx, organization, username, string(model.RoleEdgeBannerViewer))
31 return authPayload, err
32 }
33
34
35 func (r *mutationResolver) Login(ctx context.Context, username string, password string, organization string) (*model.AuthPayload, error) {
36 organization = bsl.TrimOrg(organization)
37 _, err := r.TenantService.GetByName(ctx, organization)
38 if err != nil {
39 return nil, fmt.Errorf("organization %s, does not exist", organization)
40 }
41 payload, err := r.UserManagementService.Login(ctx, username, password, organization)
42 return payload, err
43 }
44
45
46 func (r *mutationResolver) LoginWithOkta(ctx context.Context, oktaToken string, refreshToken string, organization string) (*model.OktaAuthPayload, error) {
47 return r.UserManagementService.LoginWithOktaToken(ctx, oktaToken, refreshToken, organization)
48 }
49
50
51 func (r *mutationResolver) VerifyOktaToken(ctx context.Context, oktaToken string) (bool, error) {
52 resp, err := r.UserManagementService.VerifyOktaToken(ctx, oktaToken)
53 if err != nil {
54 return false, err
55 }
56 return resp.Active, nil
57 }
58
59
60 func (r *mutationResolver) UpdateUserPassword(ctx context.Context, username string, newPassword string, organization string) (*model.EdgeResponsePayload, error) {
61 organization = bsl.GetOrgShortName(organization)
62 if err := r.UserManagementService.ResetPassword(ctx, username, newPassword, organization); err != nil {
63 return nil, err
64 }
65 return mapper.ToEdgeResponsePayload(200, "Updated Successfully!"), nil
66 }
67
68
69 func (r *mutationResolver) DeleteUser(ctx context.Context, username string) (bool, error) {
70 if err := r.UserManagementService.Delete(ctx, username); err != nil {
71 return false, err
72 }
73 return true, nil
74 }
75
76
77 func (r *mutationResolver) Logout(ctx context.Context) (bool, error) {
78 return true, nil
79 }
80
81
82 func (r *mutationResolver) ForgotPassword(ctx context.Context, username string, organization string) (bool, error) {
83 organization = bsl.GetOrgShortName(organization)
84 if err := r.RoleService.RecoverPassword(ctx, username, organization); err != nil {
85 return false, err
86 }
87 return true, nil
88 }
89
90
91 func (r *mutationResolver) UpdatePasswordWithToken(ctx context.Context, token string, organization string, newPassword string) (bool, error) {
92 if err := r.UserManagementService.UpdateUserPasswordWithToken(ctx, token, organization, newPassword); err != nil {
93 return false, err
94 }
95 return true, nil
96 }
97
98
99 func (r *mutationResolver) TokenExchange(ctx context.Context) (string, error) {
100 user := middleware.ForContext(ctx)
101 organization := bsl.GetOrgShortName(user.Organization)
102 return r.UserManagementService.TokenExchange(ctx, organization, user, "bsl")
103 }
104
105
106 func (r *mutationResolver) SessionRefresh(ctx context.Context, provider model.AuthProvider) (string, error) {
107 user := middleware.ForContext(ctx)
108 organization := bsl.GetOrgShortName(user.Organization)
109 return r.UserManagementService.TokenExchange(ctx, organization, user, provider.String())
110 }
111
112
113 func (r *mutationResolver) UpdateUserProfile(ctx context.Context, user model.UpdateUser) (*model.User, error) {
114 currentUser := middleware.ForContext(ctx)
115 if currentUser == nil {
116 return nil, fmt.Errorf("missing authenticated user")
117 }
118 organization := bsl.GetOrgShortName(currentUser.Organization)
119 userProfile, err := r.UserManagementService.GetUser(ctx, user.Username, organization, currentUser.Token, currentUser.AuthProvider)
120 if err != nil {
121 return nil, err
122 }
123 if utils.IsNullOrEmpty(user.Status) {
124 user.Status = &userProfile.Status
125 }
126 if utils.IsNullOrEmpty(user.FamilyName) {
127 user.FamilyName = &userProfile.FamilyName
128 }
129 if utils.IsNullOrEmpty(user.Email) {
130 user.Email = userProfile.Email
131 }
132 if utils.IsNullOrEmpty(user.FullName) {
133 user.FullName = &userProfile.FullName
134 }
135 if utils.IsNullOrEmpty(user.GivenName) {
136 user.GivenName = &userProfile.GivenName
137 }
138 return r.UserManagementService.UpdateUserProfile(ctx, &user)
139 }
140
141
142 func (r *queryResolver) Users(ctx context.Context, bannerEdgeID *string) ([]*model.User, error) {
143 var users []*model.User
144 var errs error
145 if !utils.IsNullOrEmpty(bannerEdgeID) {
146 b, err := r.BannerService.GetBanner(ctx, *bannerEdgeID)
147 if err != nil {
148 return nil, err
149 }
150 if banner.Type(b.BannerType) == banner.Org {
151 users, errs = r.UserManagementService.GetUsersForOrgBanner(ctx, b.Name)
152 } else {
153 users, errs = r.BannerService.GetUsersForEuBanner(ctx, b.BannerBSLId)
154 }
155 } else {
156 users, errs = r.UserManagementService.GetUsers(ctx)
157 }
158 if errs != nil {
159 return users, errs
160 }
161 return users, errs
162 }
163
164
165 func (r *queryResolver) UserData(ctx context.Context, username string) (*model.UserData, error) {
166 banners, err := r.BannerService.GetUserAssignedBanners(ctx, username)
167 if err != nil {
168 return &model.UserData{}, err
169 }
170 roles, err := r.RoleService.GetEdgeGroupsForUserUser(ctx, username)
171 if err != nil {
172 return &model.UserData{}, err
173 }
174 return &model.UserData{AssignedBanners: banners, Roles: roles}, nil
175 }
176
177
178 func (r *queryResolver) WhoAmI(ctx context.Context) (*model.User, error) {
179 user := middleware.ForContext(ctx)
180 if user == nil {
181 return nil, fmt.Errorf("missing authenticated user")
182 }
183 organization := bsl.GetOrgShortName(user.Organization)
184 return r.UserManagementService.WhoAmI(ctx, user.Username, organization, user.Token, user.AuthProvider)
185 }
186
187
188 func (r *queryResolver) User(ctx context.Context, username string) (*model.User, error) {
189 user := middleware.ForContext(ctx)
190 if user == nil {
191 return nil, fmt.Errorf("missing authenticated user")
192 }
193 organization := bsl.GetOrgShortName(user.Organization)
194 userProfile, err := r.UserManagementService.GetUser(ctx, username, organization, user.Token, user.AuthProvider)
195 if err != nil {
196 return nil, err
197 }
198 return userProfile, nil
199 }
200
201
202 func (r *queryResolver) SessionUserEdgeRole(ctx context.Context) ([]string, error) {
203 user := middleware.ForContext(ctx)
204
205 data, err := r.UserManagementService.GetSessionUserEdgeRoles(ctx, user.Username, user.Token, user.Organization, user.AuthProvider)
206 if err != nil {
207 return nil, err
208 }
209 return data, nil
210 }
211
View as plain text