(rw http.ResponseWriter, req *http.Request)
| 235 | } |
| 236 | |
| 237 | func (rh *RootHandler) serveDiscovery(rw http.ResponseWriter, req *http.Request) { |
| 238 | d := &camtypes.Discovery{ |
| 239 | BlobRoot: rh.BlobRoot, |
| 240 | JSONSignRoot: rh.JSONSignRoot, |
| 241 | HelpRoot: rh.helpRoot, |
| 242 | ImporterRoot: rh.importerRoot, |
| 243 | SearchRoot: rh.SearchRoot, |
| 244 | ShareRoot: rh.shareRoot, |
| 245 | StatusRoot: rh.statusRoot, |
| 246 | OwnerName: rh.OwnerName, |
| 247 | UserName: rh.Username, |
| 248 | AuthToken: auth.DiscoveryToken(), |
| 249 | ThumbVersion: images.ThumbnailVersion(), |
| 250 | } |
| 251 | if gener, ok := rh.Storage.(blobserver.Generationer); ok { |
| 252 | initTime, gen, err := gener.StorageGeneration() |
| 253 | if err != nil { |
| 254 | d.StorageGenerationError = err.Error() |
| 255 | } else { |
| 256 | d.StorageInitTime = types.Time3339(initTime) |
| 257 | d.StorageGeneration = gen |
| 258 | } |
| 259 | } else { |
| 260 | log.Printf("Storage type %T is not a blobserver.Generationer; not sending storageGeneration", rh.Storage) |
| 261 | } |
| 262 | if rh.ui != nil { |
| 263 | d.UIDiscovery = rh.ui.discovery() |
| 264 | } |
| 265 | if rh.sigh != nil { |
| 266 | d.Signing = rh.sigh.Discovery(rh.JSONSignRoot) |
| 267 | } |
| 268 | if len(rh.sync) > 0 { |
| 269 | syncHandlers := make([]camtypes.SyncHandlerDiscovery, 0, len(rh.sync)) |
| 270 | for _, sh := range rh.sync { |
| 271 | syncHandlers = append(syncHandlers, sh.discovery()) |
| 272 | } |
| 273 | d.SyncHandlers = syncHandlers |
| 274 | } |
| 275 | d.HasLegacySHA1Index = rh.hasLegacySHA1 |
| 276 | discoveryHelper(rw, req, d) |
| 277 | } |
| 278 | |
| 279 | func discoveryHelper(rw http.ResponseWriter, req *http.Request, dr *camtypes.Discovery) { |
| 280 | rw.Header().Set("Content-Type", "text/javascript") |
no test coverage detected