Memebrships: Refactor Store interface
Use unified memberships table.
Add few internal API endpoints.
Change-Id: I80ac5a0f5c262e04d7898cca571b938a35d68d39
diff --git a/core/installer/server/welcome/server.go b/core/installer/server/welcome/server.go
index 198f637..23f9e00 100644
--- a/core/installer/server/welcome/server.go
+++ b/core/installer/server/welcome/server.go
@@ -177,12 +177,17 @@
}
}
+type identityCreateResp struct {
+ Id string `json:"id"`
+}
+
func (s *Server) createAccount(w http.ResponseWriter, r *http.Request) {
req, err := extractReq(r)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
+ var idResp identityCreateResp
{
var buf bytes.Buffer
cr := apiCreateAccountReq{req.Username, req.Password}
@@ -223,8 +228,12 @@
})
return
}
+ if err := json.NewDecoder(resp.Body).Decode(&idResp); err != nil {
+ http.Error(w, "Error Decoding JSON", http.StatusInternalServerError)
+ return
+ }
}
- if err := s.createUser(req.Username); err != nil {
+ if err := s.createUser(idResp.Id, req.Username); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
@@ -232,23 +241,29 @@
}
type firstAccount struct {
- Created bool `json:"created"`
- Domain string `json:"domain"`
- Groups []string `json:"groups"`
+ Created bool `json:"created"`
+ Domain string `json:"domain"`
+ Groups []group `json:"groups"`
+}
+
+type user struct {
+ Id string `json:"id"`
+ Username string `json:"username"`
+ Email string `json:"email"`
+}
+
+type group struct {
+ Id string `json:"id"`
+ Title string `json:"title"`
+ Description string `json:"description"`
}
type initRequest struct {
- User string `json:"user"`
- Email string `json:"email"`
- Groups []string `json:"groups"`
+ User user `json:"user"`
+ Groups []group `json:"groups"`
}
-type createUserRequest struct {
- User string `json:"user"`
- Email string `json:"email"`
-}
-
-func (s *Server) createUser(username string) error {
+func (s *Server) createUser(id, username string) error {
_, err := s.repo.Do(func(r soft.RepoFS) (string, error) {
var fa firstAccount
if err := soft.ReadYaml(r, "first-account.yaml", &fa); err != nil {
@@ -256,10 +271,14 @@
}
var resp *http.Response
var err error
+ u := user{
+ id,
+ username,
+ fmt.Sprintf("%s@%s", username, fa.Domain),
+ }
if fa.Created {
- req := createUserRequest{username, fmt.Sprintf("%s@%s", username, fa.Domain)}
var buf bytes.Buffer
- if err := json.NewEncoder(&buf).Encode(req); err != nil {
+ if err := json.NewEncoder(&buf).Encode(u); err != nil {
return "", err
}
resp, err = http.Post(
@@ -268,7 +287,10 @@
&buf,
)
} else {
- req := initRequest{username, fmt.Sprintf("%s@%s", username, fa.Domain), fa.Groups}
+ req := initRequest{
+ u,
+ fa.Groups,
+ }
var buf bytes.Buffer
if err := json.NewEncoder(&buf).Encode(req); err != nil {
return "", err