Opened 10 years ago
Last modified 10 years ago
#226 closed defect
store flappserver services in JSON, not separate files — at Version 1
Reported by: | Brian Warner | Owned by: | Brian Warner |
---|---|---|---|
Priority: | major | Milestone: | 0.7.0 |
Component: | appserver | Version: | 0.6.5 |
Keywords: | Cc: |
Description (last modified by )
To help with https://github.com/warner/git-foolscap/issues/1 (ex #200), as well as fix a minor security problem with flappserver service lookup, we need to change the way that it stores the service information.
Currently (in 0.6.5) these services are stored as a collection of small files, three per service (named service_type
, service_args
, and an optional comment
), in a subdirectory named after the service's swissnum. These all live in a directory named services
which itself lives inside the flappserver's basedir. The complete path looks like BASEDIR/services/SWISSNUM/service_type
. The flappserver uses the incoming swissnum to locate the service information, instantiates something according to the service_type, and connects the new service object to the caller.
But swissnums are allowed to be pretty arbitrary: git-foolscap puts a slash in them (SWISSNUM/REPONAME) so that "git clone" behaves well. And flappserver list
does a simple os.listdir("BASEDIR/services")
to enumerate the swissnums, which breaks on the embedded slashes (as they wind up creating intermediate directories).
So the new plan is:
- store service info in a single JSON file,
BASEDIR/services.json
- write one function that loads a dict of services (swissnum ->
{service_type, service_args, comment}
), by loading the JSON file if present, otherwise scanningservices
withos.path.walk()
for allservice_type
files and reconstructing swissnums from the (possibly multi-part) paths - use this dict for:
flappserver list
- service lookup
flappserver add
(load the dict, add keys, writeservices.json
)
This will basically force an upgrade if you use flappserver add
on an old-format basedir, otherwise it'll leave things alone (but use the contents more safely).