{ "_for-emacs": "-*- mode: js2;-*-", "handlerConfig": true, "baseURL": ["_env", "${CAMLI_BASEURL}"], "auth": ["_env", "${CAMLI_AUTH}"], "https": ["_env", "${CAMLI_TLS}", false], "httpsCert": "config/tls.crt", "httpsKey": "config/tls.key", "prefixes": { "/": { "handler": "root", "handlerArgs": { "ownerName": ["_env", "${USER}-dev"], "jsonSignRoot": "/sighelper/", "blobRoot": "/bs-recv/", "helpRoot": "/help/", "statusRoot": "/status/", "searchRoot": "/my-search/", "stealth": false } }, "/hello/": { "handler": "app", "enabled": ["_env", "${CAMLI_HELLO_ENABLED}"], "handlerArgs": { "program": "hello", "appConfig": { "word": "world" } } }, "/pics/": { "handler": "app", "enabled": ["_env", "${CAMLI_PUBLISH_ENABLED}"], "handlerArgs": { "program": "publisher", "appConfig": { "camliRoot": "dev-pics-root", "sourceRoot": ["_env", "${CAMLI_DEV_CAMLI_ROOT}", ""], "cacheRoot": ["_env", "${CAMLI_ROOT_CACHE}"], "goTemplate": "gallery.html" } } }, "/stub-test-disable/": { "handler": "publish", "enabled": false, "handlerArgs": { } }, "/ui/": { "handler": "ui", "handlerArgs": { "sourceRoot": ["_env", "${CAMLI_DEV_CAMLI_ROOT}", ""], "cache": "/cache/", "scaledImage": { "type": "kv", "file": ["_env", "${CAMLI_ROOT_CACHE}/thumbnails.kv", ""] } } }, "/status/": { "handler": "status" }, "/help/": { "handler": "help" }, "/sync-index/": { "handler": "sync", "handlerArgs": { "from": "/bs/", "to": ["_env", "${CAMLI_INDEXER_PATH}"], "queue": { "type": "memory" }, "fullSyncOnStart": ["_env", "${CAMLI_FULL_INDEX_SYNC_ON_START}"], "blockingFullSyncOnStart": ["_env", "${CAMLI_FULL_INDEX_SYNC_ON_START}"] } }, "/sync-r1/": { "handler": "sync", "handlerArgs": { "from": "/bs/", "to": "/r1/", "queue": { "type": "memory" } } }, "/sighelper/": { "handler": "jsonsign", "handlerArgs": { "secretRing": ["_env", "${CAMLI_SECRET_RING}"], "keyId": ["_env", "${CAMLI_KEYID}"], "publicKeyDest": "/bs/" } }, "/bs-recv/": { "handler": "storage-replica", "handlerArgs": { "minWritesForSuccess": 2, "backends": ["/bs/", ["_env", "${CAMLI_INDEXER_PATH}"]], "readBackends": ["/bs/"] } }, "/cond-unused/": { "handler": "storage-cond", "handlerArgs": { "write": { "if": "isSchema", "then": "/bs-recv/", "else": "/bs/" }, "read": "/bs/" } }, "/bs/": { "handler": "storage-blobpacked", "handlerArgs": { "smallBlobs": "/bs-loose/", "largeBlobs": "/bs-packed/", "metaIndex": { "type": "kv", "file": ["_env", "${CAMLI_ROOT}/packindex.kv"] } } }, "/bs-loose/": { "handler": "storage-filesystem", "handlerArgs": { "path": ["_env", "${CAMLI_ROOT}"] } }, "/bs-packed/": { "handler": "storage-filesystem", "handlerArgs": { "path": ["_env", "${CAMLI_ROOT}/packed"] } }, "/cache/": { "handler": "storage-filesystem", "handlerArgs": { "path": ["_env", "${CAMLI_ROOT_CACHE}"] } }, "/sharder/": { "handler": "storage-shard", "handlerArgs": { "backends": ["/s1/", "/s2/"] } }, "/s1/": { "handler": "storage-filesystem", "handlerArgs": { "path": ["_env", "${CAMLI_ROOT_SHARD1}"] } }, "/s2/": { "handler": "storage-filesystem", "handlerArgs": { "path": ["_env", "${CAMLI_ROOT_SHARD2}"] } }, "/repl/": { "handler": "storage-replica", "handlerArgs": { "backends": ["/r1/", "/r2/", "/r3/"], "minWritesForSuccess": 2 } }, "/r1/": { "handler": "storage-diskpacked", "handlerArgs": { "path": ["_env", "${CAMLI_ROOT_REPLICA1}"] } }, "/r2/": { "handler": "storage-filesystem", "handlerArgs": { "path": ["_env", "${CAMLI_ROOT_REPLICA2}"] } }, "/r3/": { "handler": "storage-filesystem", "handlerArgs": { "path": ["_env", "${CAMLI_ROOT_REPLICA3}"] } }, "/enc/": { "handler": "storage-encrypt", "handlerArgs": { "I_AGREE": "that encryption support hasn't been peer-reviewed, isn't finished, and its format might change.", "meta": "/encmeta/", "blobs": "/encblob/", "metaIndex": { "type": "memory" }, "key": "000102030405060708090a0b0c0d0e0f" } }, "/encmeta/": { "handler": "storage-filesystem", "handlerArgs": { "path": ["_env", "${CAMLI_ROOT_ENCMETA}"] } }, "/encblob/": { "handler": "storage-filesystem", "handlerArgs": { "path": ["_env", "${CAMLI_ROOT_ENCBLOB}"] } }, "/index-memory/": { "enabled": ["_env", "${CAMLI_MEMINDEX_ENABLED}"], "handler": "storage-index", "handlerArgs": { "blobSource": "/bs/", "storage": { "type": "memory" } } }, "/index-leveldb/": { "enabled": ["_env", "${CAMLI_LEVELDB_ENABLED}"], "handler": "storage-index", "handlerArgs": { "blobSource": "/bs/", "storage": { "type": "leveldb", "file": ["_env", "${CAMLI_DBNAME}", ""] } } }, "/index-kv/": { "enabled": ["_env", "${CAMLI_KVINDEX_ENABLED}"], "handler": "storage-index", "handlerArgs": { "blobSource": "/bs/", "storage": { "type": "kv", "file": ["_env", "${CAMLI_DBNAME}", ""] } } }, "/index-mongo/": { "enabled": ["_env", "${CAMLI_MONGO_ENABLED}", true], "handler": "storage-index", "handlerArgs": { "blobSource": "/bs/", "storage": { "type": "mongo", "host": "localhost", "database": ["_env", "${CAMLI_DBNAME}"] } } }, "/index-mysql/": { "enabled": ["_env", "${CAMLI_MYSQL_ENABLED}", true], "handler": "storage-index", "handlerArgs": { "blobSource": "/bs/", "storage": { "type": "mysql", "database": ["_env", "${CAMLI_DBNAME}"], "user": "root", "password": "root", "host": "127.0.0.1" } } }, "/index-postgres/": { "enabled": ["_env", "${CAMLI_POSTGRES_ENABLED}", true], "handler": "storage-index", "handlerArgs": { "blobSource": "/bs/", "storage": { "type": "postgres", "database": ["_env", "${CAMLI_DBNAME}"], "user": "postgres", "password": "postgres", "host": "127.0.0.1" } } }, "/index-sqlite/": { "enabled": ["_env", "${CAMLI_SQLITE_ENABLED}", true], "handler": "storage-index", "handlerArgs": { "blobSource": "/bs/", "storage": { "type": "sqlite", "file": ["_env", "${CAMLI_DBNAME}"] } } }, "/my-search/": { "handler": "search", "handlerArgs": { "index": ["_env", "${CAMLI_INDEXER_PATH}"], "owner": ["_env", "${CAMLI_PUBKEY_BLOBREF}"], "slurpToMemory": true, "devBlockStartupOn": "/sync-index/" } }, "/importer/": { "handler": "importer", "handlerArgs": { "dummy": { "clientID": "dummyID", "clientSecret": "foobar" }, "flickr": { "clientSecret": ["_env", "${CAMLI_FLICKR_API_KEY}", ""] }, "foursquare": { "clientSecret": ["_env", "${CAMLI_FOURSQUARE_API_KEY}", ""] }, "picasa": { "clientSecret": ["_env", "${CAMLI_PICASA_API_KEY}", ""] }, "twitter": { "clientSecret": ["_env", "${CAMLI_TWITTER_API_KEY}", ""] } } }, "/share/": { "handler": "share", "handlerArgs": { "blobRoot": "/bs/" } } } }