Skip to content

Commit 96e799d

Browse files
committed
WIP: enhancements for cs3org/cs3apis#145
1 parent 36d6211 commit 96e799d

File tree

4 files changed

+27
-30
lines changed

4 files changed

+27
-30
lines changed
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Enhancement: handle mimetypes and their friendly names
2+
3+
https://github.com/cs3org/cs3apis/pull/145
4+
https://github.com/cs3org/reva/pull/123456

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,5 @@ replace (
8282
github.com/eventials/go-tus => github.com/andrewmostello/go-tus v0.0.0-20200314041820-904a9904af9a
8383
github.com/oleiade/reflections => github.com/oleiade/reflections v1.0.1
8484
google.golang.org/grpc => google.golang.org/grpc v1.26.0 // temporary downgrade
85+
github.com/cs3org/go-cs3apis => /home/lopresti/CS3API/build/go-cs3apis
8586
)

internal/grpc/services/storageprovider/storageprovider.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@ func (c *config) init() {
9393
c.AvailableXS = map[string]uint32{"md5": 100, "unset": 1000}
9494
}
9595
if c.MimeTypes == nil || len(c.MimeTypes) == 0 {
96-
c.MimeTypes = map[string]string{".zmd": "application/compressed-markdown"}
96+
c.MimeTypes = map[string]string{".zmd": "application/compressed-markdown",
97+
".epd": "application/etherpad"}
9798
}
9899

99100
}

internal/http/services/appprovider/appprovider.go

+20-29
Original file line numberDiff line numberDiff line change
@@ -124,16 +124,15 @@ func (s *svc) handleList(w http.ResponseWriter, r *http.Request) {
124124
return
125125
}
126126

127+
apps := listRes.Apps
128+
filterAppsByUserAgent(apps, r.UserAgent())
127129
mimeTypes := listRes.MimeTypes
128-
filterAppsByUserAgent(mimeTypes, r.UserAgent())
129-
130-
filterMimeTypes(mimeTypes)
131-
132-
if mimeTypes == nil {
133-
mimeTypes = make(map[string]*appregistry.AppProviderList) // ensure array empty object instead of null in json
130+
res := mapMerge(apps, mimeTypes)
131+
if res == nil {
132+
res = make(map[string]*appregistry.AppProviderList) // ensure array empty object instead of null in json
134133
}
135134

136-
js, err := json.Marshal(map[string]interface{}{"mime-types": mimeTypes})
135+
js, err := json.Marshal(map[string]interface{}{"mime-types": res})
137136
if err != nil {
138137
ocmd.WriteError(w, r, ocmd.APIErrorServerError, "error marshalling JSON response", err)
139138
return
@@ -189,39 +188,31 @@ func (s *svc) handleOpen(w http.ResponseWriter, r *http.Request) {
189188
}
190189
}
191190

192-
func filterMimeTypes(mimeTypes map[string]*appregistry.AppProviderList) {
193-
for m, providers := range mimeTypes {
191+
func filterAppsByUserAgent(appProviders map[string]*appregistry.AppProviderList, userAgent string) {
192+
ua := ua.Parse(userAgent)
193+
194+
for m, providers := range appProviders {
194195
apps := []*appregistry.ProviderInfo{}
195196
for _, p := range providers.AppProviders {
196197
p.Address = "" // address is internal only and not needed in the client
197-
// apps are called by name, so if it has no name you cannot call it. Therefore we should not advertise it.
198-
if p.Name != "" {
198+
// apps are called by name, so if it has no name it cannot be called and should not be advertised
199+
// also filter Desktop-only apps if ua is not Desktop
200+
if p.Name != "" && (ua.Desktop || !p.DesktopOnly) {
199201
apps = append(apps, p)
200202
}
201203
}
202-
if len(apps) > 0 {
203-
mimeTypes[m] = &appregistry.AppProviderList{AppProviders: apps}
204-
} else {
205-
delete(mimeTypes, m)
206-
}
204+
appProviders[m] = &appregistry.AppProviderList{AppProviders: apps}
207205
}
208206
}
209207

210-
func filterAppsByUserAgent(mimeTypes map[string]*appregistry.AppProviderList, userAgent string) {
211-
ua := ua.Parse(userAgent)
212-
if ua.Desktop {
213-
return
214-
}
215-
216-
for m, providers := range mimeTypes {
217-
apps := []*appregistry.ProviderInfo{}
218-
for _, p := range providers.AppProviders {
219-
if !p.DesktopOnly {
220-
apps = append(apps, p)
221-
}
208+
func mapMerge(ms ...map[string]interface{}) map[string]interface{} {
209+
res := map[string]interface{}
210+
for _, m := range ms {
211+
for k, v := range m {
212+
res[k] = append(res[k], v)
222213
}
223-
mimeTypes[m] = &appregistry.AppProviderList{AppProviders: apps}
224214
}
215+
return res
225216
}
226217

227218
func (s *svc) getStatInfo(ctx context.Context, fileID string, client gateway.GatewayAPIClient) (*provider.ResourceInfo, ocmd.APIErrorCode, error) {

0 commit comments

Comments
 (0)