func()

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))
}