(ld blobserver.Loader, conf jsonconfig.Obj)
| 140 | } |
| 141 | |
| 142 | func newHandlerFromConfig(ld blobserver.Loader, conf jsonconfig.Obj) (http.Handler, error) { |
| 143 | indexPrefix := conf.RequiredString("index") // TODO: add optional help tips here? |
| 144 | ownerCfg := conf.RequiredObject("owner") |
| 145 | ownerId := ownerCfg.RequiredString("identity") |
| 146 | ownerSecring := ownerCfg.RequiredString("secringFile") |
| 147 | |
| 148 | devBlockStartupPrefix := conf.OptionalString("devBlockStartupOn", "") |
| 149 | slurpToMemory := conf.OptionalBool("slurpToMemory", false) |
| 150 | if err := conf.Validate(); err != nil { |
| 151 | return nil, err |
| 152 | } |
| 153 | |
| 154 | if devBlockStartupPrefix != "" { |
| 155 | _, err := ld.GetHandler(devBlockStartupPrefix) |
| 156 | if err != nil { |
| 157 | return nil, fmt.Errorf("search handler references bogus devBlockStartupOn handler %s: %v", devBlockStartupPrefix, err) |
| 158 | } |
| 159 | } |
| 160 | |
| 161 | indexHandler, err := ld.GetHandler(indexPrefix) |
| 162 | if err != nil { |
| 163 | return nil, fmt.Errorf("search config references unknown handler %q", indexPrefix) |
| 164 | } |
| 165 | indexer, ok := indexHandler.(index.Interface) |
| 166 | if !ok { |
| 167 | return nil, fmt.Errorf("search config references invalid indexer %q (actually a %T)", indexPrefix, indexHandler) |
| 168 | } |
| 169 | |
| 170 | owner, err := newOwner(serverconfig.Owner{ |
| 171 | Identity: ownerId, |
| 172 | SecringFile: ownerSecring, |
| 173 | }) |
| 174 | if err != nil { |
| 175 | return nil, fmt.Errorf("could not create Owner %v", err) |
| 176 | } |
| 177 | h := NewHandler(indexer, owner) |
| 178 | |
| 179 | if slurpToMemory { |
| 180 | ii := indexer.(*index.Index) |
| 181 | ii.Lock() |
| 182 | corpus, err := ii.KeepInMemory() |
| 183 | if err != nil { |
| 184 | ii.Unlock() |
| 185 | return nil, fmt.Errorf("error slurping index to memory: %v", err) |
| 186 | } |
| 187 | h.SetCorpus(corpus) |
| 188 | ii.Unlock() |
| 189 | } |
| 190 | |
| 191 | return h, nil |
| 192 | } |
| 193 | |
| 194 | func newOwner(ownerCfg serverconfig.Owner) (*index.Owner, error) { |
| 195 | entity, err := jsonsign.EntityFromSecring(ownerCfg.Identity, ownerCfg.SecringFile) |
nothing calls this directly
no test coverage detected