in lib/dam/config.go [81:149]
func (s *Service) GetFlatViews(w http.ResponseWriter, r *http.Request) {
cfg, err := s.loadConfig(nil, getRealm(r))
if err != nil {
httputils.WriteError(w, status.Errorf(codes.Unavailable, "%v", err))
return
}
viewMap := make(map[string]*pb.GetFlatViewsResponse_FlatView, 0)
for resname, res := range cfg.Resources {
for vname, view := range res.Views {
v := makeView(vname, view, res, cfg, s.hidePolicyBasis, s.adapters)
st, ok := cfg.ServiceTemplates[v.ServiceTemplate]
if !ok {
httputils.WriteError(w, status.Errorf(codes.Internal, "resource %q view %q service template %q is undefined", resname, vname, v.ServiceTemplate))
return
}
desc, ok := s.adapters.Descriptors[st.ServiceName]
if !ok {
httputils.WriteError(w, status.Errorf(codes.Internal, "resource %q view %q service template %q service name %q is undefined", resname, vname, v.ServiceTemplate, st.ServiceName))
return
}
labels := v.Labels
if labels == nil {
labels = map[string]string{}
}
for rolename := range v.Roles {
var roleCat []string
if sr := st.ServiceRoles[rolename]; sr != nil {
roleCat = sr.DamRoleCategories
sort.Strings(roleCat)
}
for interfaceName, iface := range v.ComputedInterfaces {
for _, interfaceURI := range iface.Uri {
if len(v.ContentTypes) == 0 {
v.ContentTypes = []string{"*"}
}
for _, mime := range v.ContentTypes {
key := res.Umbrella + "/" + resname + "/" + vname + "/" + rolename + "/" + interfaceName + "/" + mime
path := strings.Replace(r.URL.Path, "/flatViews", "/resources/"+resname+"/views/"+vname+"/roles/"+rolename, -1)
viewMap[key] = &pb.GetFlatViewsResponse_FlatView{
ResourcePath: path,
Umbrella: resname,
ResourceName: resname,
ViewName: vname,
RoleName: rolename,
InterfaceName: interfaceName,
InterfaceUri: interfaceURI,
ContentType: mime,
Labels: labels,
ServiceName: st.ServiceName,
Platform: desc.Platform,
PlatformService: st.ServiceName, // for now it is the same name as ServiceName
MaxTokenTtl: res.MaxTokenTtl,
ResourceUi: res.Ui,
ViewUi: v.Ui,
RoleUi: st.Ui,
RoleCategories: roleCat,
}
}
}
}
}
}
}
resp := pb.GetFlatViewsResponse{
Views: viewMap,
}
httputils.WriteResp(w, proto.Message(&resp))
}