|
|
|
|
@@ -224,162 +224,141 @@ func (h *ApplicationHandler) AdministrationGroupInviteAdmin(w http.ResponseWrite
|
|
|
|
|
accountresp *accounts.GetAccountUsernameResponse
|
|
|
|
|
err error
|
|
|
|
|
)
|
|
|
|
|
go func() {
|
|
|
|
|
groupresp, err = h.services.GRPC.GroupsManagement.GetGroup(context.TODO(), &groupsmanagement.GetGroupRequest{
|
|
|
|
|
Id: groupid,
|
|
|
|
|
Namespace: "parcoursmob_organizations",
|
|
|
|
|
})
|
|
|
|
|
groupresp, err = h.services.GRPC.GroupsManagement.GetGroup(context.TODO(), &groupsmanagement.GetGroupRequest{
|
|
|
|
|
Id: groupid,
|
|
|
|
|
Namespace: "parcoursmob_organizations",
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("Issue in Groups management service - GetGroup")
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
r.ParseForm()
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("Issue in Groups management service - GetGroup")
|
|
|
|
|
accountresp, err = h.services.GRPC.MobilityAccounts.GetAccountUsername(context.TODO(), &accounts.GetAccountUsernameRequest{
|
|
|
|
|
Username: r.FormValue("username"),
|
|
|
|
|
Namespace: "parcoursmob",
|
|
|
|
|
})
|
|
|
|
|
if err == nil {
|
|
|
|
|
log.Print("account exists")
|
|
|
|
|
// Account already exists : adding the existing account to admin list
|
|
|
|
|
account := accountresp.Account.ToStorageType()
|
|
|
|
|
// account.Data["groups"] = append(account.Data["groups"].([]any), groupid, groupid)
|
|
|
|
|
account.Data["groups"] = append(account.Data["groups"].([]any), groupid, groupid+":admin")
|
|
|
|
|
|
|
|
|
|
as, _ := accounts.AccountFromStorageType(&account)
|
|
|
|
|
|
|
|
|
|
if _, err = h.services.GRPC.MobilityAccounts.UpdateData(context.TODO(), &accounts.UpdateDataRequest{Account: as}); err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("could not set groups to user account")
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
r.ParseForm()
|
|
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
|
accountresp, err = h.services.GRPC.MobilityAccounts.GetAccountUsername(context.TODO(), &accounts.GetAccountUsernameRequest{
|
|
|
|
|
Username: r.FormValue("username"),
|
|
|
|
|
Namespace: "parcoursmob",
|
|
|
|
|
})
|
|
|
|
|
if err == nil {
|
|
|
|
|
// Account already exists : adding the existing account to admin list
|
|
|
|
|
account := accountresp.Account.ToStorageType()
|
|
|
|
|
account.Data["groups"] = append(account.Data["groups"].([]any), groupid, groupid)
|
|
|
|
|
account.Data["groups"] = append(account.Data["groups"].([]any), groupid, groupid+":admin")
|
|
|
|
|
|
|
|
|
|
as, _ := accounts.AccountFromStorageType(&account)
|
|
|
|
|
|
|
|
|
|
_, err = h.services.GRPC.MobilityAccounts.UpdateData(
|
|
|
|
|
context.TODO(),
|
|
|
|
|
&accounts.UpdateDataRequest{
|
|
|
|
|
Account: as,
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
data := map[string]any{
|
|
|
|
|
"group": groupresp.Group.ToStorageType().Data["name"],
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := h.emailing.Send("onboarding.existing_administrator", r.FormValue("username"), data); err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("Cannot send email")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
http.Redirect(w, r, fmt.Sprintf("/app/administration/groups/%s", groupid), http.StatusFound)
|
|
|
|
|
return
|
|
|
|
|
} else {
|
|
|
|
|
// Onboard now administrator
|
|
|
|
|
onboarding := map[string]any{
|
|
|
|
|
"username": r.FormValue("username"),
|
|
|
|
|
"group": groupid,
|
|
|
|
|
"admin": true,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
b := make([]byte, 16)
|
|
|
|
|
if _, err := io.ReadFull(rand.Reader, b); err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("Issue creating random bytes")
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
key := base64.RawURLEncoding.EncodeToString(b)
|
|
|
|
|
|
|
|
|
|
h.cache.PutWithTTL("onboarding/"+key, onboarding, 168*time.Hour) // 1 week TTL
|
|
|
|
|
|
|
|
|
|
data := map[string]any{
|
|
|
|
|
"group": groupresp.Group.ToStorageType().Data["name"],
|
|
|
|
|
"key": key,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := h.emailing.Send("onboarding.new_administrator", r.FormValue("username"), data); err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("Cannot send email")
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
data := map[string]any{
|
|
|
|
|
"group": groupresp.Group.ToStorageType().Data["name"],
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
http.Redirect(w, r, fmt.Sprintf("/app/administration/groups/%s", groupid), http.StatusFound)
|
|
|
|
|
return
|
|
|
|
|
}()
|
|
|
|
|
if err := h.emailing.Send("onboarding.existing_administrator", r.FormValue("username"), data); err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("Cannot send email")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
// Onboard now administrator
|
|
|
|
|
onboarding := map[string]any{
|
|
|
|
|
"username": r.FormValue("username"),
|
|
|
|
|
"group": groupid,
|
|
|
|
|
"admin": true,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
b := make([]byte, 16)
|
|
|
|
|
if _, err := io.ReadFull(rand.Reader, b); err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("Issue creating random bytes")
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
key := base64.RawURLEncoding.EncodeToString(b)
|
|
|
|
|
|
|
|
|
|
h.cache.PutWithTTL("onboarding/"+key, onboarding, 168*time.Hour) // 1 week TTL
|
|
|
|
|
|
|
|
|
|
data := map[string]any{
|
|
|
|
|
"group": groupresp.Group.ToStorageType().Data["name"],
|
|
|
|
|
"key": key,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := h.emailing.Send("onboarding.new_administrator", r.FormValue("username"), data); err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("Cannot send email")
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
http.Redirect(w, r, fmt.Sprintf("/app/administration/groups/%s", groupid), http.StatusFound)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (h *ApplicationHandler) AdministrationGroupInviteMember(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
vars := mux.Vars(r)
|
|
|
|
|
groupid := vars["groupid"]
|
|
|
|
|
var (
|
|
|
|
|
group storage.Group
|
|
|
|
|
)
|
|
|
|
|
groupCh := make(chan storage.Group)
|
|
|
|
|
go func() {
|
|
|
|
|
groupresp, err := h.services.GRPC.GroupsManagement.GetGroup(context.TODO(), &groupsmanagement.GetGroupRequest{
|
|
|
|
|
Id: groupid,
|
|
|
|
|
Namespace: "parcoursmob_organizations",
|
|
|
|
|
})
|
|
|
|
|
group, err := h.services.GetGroup(groupid)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("Issue in Groups management service - GetGroup")
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
r.ParseForm()
|
|
|
|
|
accountresp, err := h.services.GRPC.MobilityAccounts.GetAccountUsername(context.TODO(), &accounts.GetAccountUsernameRequest{
|
|
|
|
|
Username: r.FormValue("username"),
|
|
|
|
|
Namespace: "parcoursmob",
|
|
|
|
|
})
|
|
|
|
|
if err == nil {
|
|
|
|
|
account := accountresp.Account.ToStorageType()
|
|
|
|
|
account.Data["groups"] = append(account.Data["groups"].([]any), group.ID)
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("Issue in Groups management service - GetGroup")
|
|
|
|
|
as, _ := accounts.AccountFromStorageType(&account)
|
|
|
|
|
|
|
|
|
|
_, err = h.services.GRPC.MobilityAccounts.UpdateData(
|
|
|
|
|
context.TODO(),
|
|
|
|
|
&accounts.UpdateDataRequest{
|
|
|
|
|
Account: as,
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
data := map[string]any{
|
|
|
|
|
"group": group.Data["name"],
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := h.emailing.Send("onboarding.existing_member", r.FormValue("username"), data); err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("error sending email onboarding.existing_member")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// http.Redirect(w, r, "/app/group/settings", http.StatusFound)
|
|
|
|
|
// return
|
|
|
|
|
} else {
|
|
|
|
|
// Onboard new administrator
|
|
|
|
|
onboarding := map[string]any{
|
|
|
|
|
"username": r.FormValue("username"),
|
|
|
|
|
"group": group.ID,
|
|
|
|
|
"admin": false,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
b := make([]byte, 16)
|
|
|
|
|
if _, err := io.ReadFull(rand.Reader, b); err != nil {
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
group := groupresp.Group.ToStorageType()
|
|
|
|
|
groupCh <- group
|
|
|
|
|
}()
|
|
|
|
|
r.ParseForm()
|
|
|
|
|
go func() {
|
|
|
|
|
group = <-groupCh
|
|
|
|
|
accountresp, err := h.services.GRPC.MobilityAccounts.GetAccountUsername(context.TODO(), &accounts.GetAccountUsernameRequest{
|
|
|
|
|
Username: r.FormValue("username"),
|
|
|
|
|
Namespace: "parcoursmob",
|
|
|
|
|
})
|
|
|
|
|
if err == nil {
|
|
|
|
|
account := accountresp.Account.ToStorageType()
|
|
|
|
|
account.Data["groups"] = append(account.Data["groups"].([]any), group.ID)
|
|
|
|
|
key := base64.RawURLEncoding.EncodeToString(b)
|
|
|
|
|
|
|
|
|
|
as, _ := accounts.AccountFromStorageType(&account)
|
|
|
|
|
|
|
|
|
|
_, err = h.services.GRPC.MobilityAccounts.UpdateData(
|
|
|
|
|
context.TODO(),
|
|
|
|
|
&accounts.UpdateDataRequest{
|
|
|
|
|
Account: as,
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
data := map[string]any{
|
|
|
|
|
"group": group.Data["name"],
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := h.emailing.Send("onboarding.existing_member", r.FormValue("username"), data); err != nil {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
http.Redirect(w, r, "/app/group/settings", http.StatusFound)
|
|
|
|
|
return
|
|
|
|
|
} else {
|
|
|
|
|
// Onboard now administrator
|
|
|
|
|
onboarding := map[string]any{
|
|
|
|
|
"username": r.FormValue("username"),
|
|
|
|
|
"group": group.ID,
|
|
|
|
|
"admin": false,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
b := make([]byte, 16)
|
|
|
|
|
if _, err := io.ReadFull(rand.Reader, b); err != nil {
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
key := base64.RawURLEncoding.EncodeToString(b)
|
|
|
|
|
|
|
|
|
|
h.cache.PutWithTTL("onboarding/"+key, onboarding, 168*time.Hour) // 1 week TTL
|
|
|
|
|
data := map[string]any{
|
|
|
|
|
"group": group.Data["name"],
|
|
|
|
|
"key": key,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := h.emailing.Send("onboarding.new_member", r.FormValue("username"), data); err != nil {
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
h.cache.PutWithTTL("onboarding/"+key, onboarding, 168*time.Hour) // 1 week TTL
|
|
|
|
|
data := map[string]any{
|
|
|
|
|
"group": group.Data["name"],
|
|
|
|
|
"key": key,
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
if err := h.emailing.Send("onboarding.new_member", r.FormValue("username"), data); err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("error sending email onboarding.new_member")
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
http.Redirect(w, r, "/app/administration/groups/"+group.ID, http.StatusFound)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func filteVehicle(r *http.Request, v *fleets.Vehicle) bool {
|
|
|
|
|
@@ -400,7 +379,6 @@ func filteVehicle(r *http.Request, v *fleets.Vehicle) bool {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (h ApplicationHandler) AdminStatVehicles(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
|
|
bookings := []fleetsstorage.Booking{}
|
|
|
|
|
administrators := []string{}
|
|
|
|
|
reequest := &fleets.GetVehiclesRequest{
|
|
|
|
|
@@ -462,7 +440,6 @@ func (h ApplicationHandler) AdminStatVehicles(w http.ResponseWriter, r *http.Req
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (h ApplicationHandler) AdminStatBookings(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
|
|
|
vehicles := map[string]fleetsstorage.Vehicle{}
|
|
|
|
|
bookings := []fleetsstorage.Booking{}
|
|
|
|
|
|
|
|
|
|
@@ -578,7 +555,6 @@ func (h ApplicationHandler) AdminStatEvents(w http.ResponseWriter, r *http.Reque
|
|
|
|
|
resp, err := h.services.GRPC.Agenda.GetEvents(context.TODO(), &agenda.GetEventsRequest{
|
|
|
|
|
Namespaces: []string{"parcoursmob_dispositifs"},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error().Err(err).Msg("Issue in Agenda service - GetEvents")
|
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
|
|