Port show_style to node (really needed now)
This commit is contained in:
parent
f7cdb5f0b7
commit
e3f2658d53
1
NEWS.md
1
NEWS.md
@ -5,6 +5,7 @@ Bug fixes:
|
|||||||
|
|
||||||
* layergroup accept both map_key and api_key (#91)
|
* layergroup accept both map_key and api_key (#91)
|
||||||
* Fix public instanciation of signed template accessing private data (#114)
|
* Fix public instanciation of signed template accessing private data (#114)
|
||||||
|
* Fix show_style in presence of complex styles
|
||||||
|
|
||||||
Enhancements:
|
Enhancements:
|
||||||
|
|
||||||
|
222
tools/show_style
222
tools/show_style
@ -1,85 +1,147 @@
|
|||||||
#!/bin/sh
|
#!/usr/bin/env node
|
||||||
|
|
||||||
# TODO: port to node, if you really need it
|
var path = require('path');
|
||||||
|
var redis = require('redis');
|
||||||
ENV='development';
|
var Step = require('step');
|
||||||
BASEDIR=`cd $(dirname $0)/../; pwd`
|
|
||||||
|
|
||||||
if test -z "$1"; then
|
|
||||||
echo "Usage: $0 [--env <environment>] <username> [<tablename>|~<token>]" >&2
|
|
||||||
echo " environment defaults to 'development'"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
username=""
|
|
||||||
token=""
|
|
||||||
|
|
||||||
while test -n "$1"; do
|
|
||||||
if test "$1" = "--env"; then
|
|
||||||
shift; ENV="$1"; shift
|
|
||||||
elif test -z "$username"; then
|
|
||||||
username="$1"; shift
|
|
||||||
elif test -z "$token"; then
|
|
||||||
token="$1"; shift
|
|
||||||
else
|
|
||||||
echo "Unused option $1" >&2
|
|
||||||
shift
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Using environment '${ENV}'"
|
|
||||||
|
|
||||||
CONFIG="${BASEDIR}/config/environments/${ENV}.js"
|
|
||||||
REDIS_PORT=`node -e "console.log(require('${CONFIG}').redis.port)"`
|
|
||||||
if test $? -ne 0; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
dbname=`redis-cli -p ${REDIS_PORT} -n 5 hget "rails:users:${username}" "database_name"`
|
function usage(me, exitcode) {
|
||||||
if test $? -ne 0; then
|
console.log("Usage: " + me + " [--env <environment>] <username> [<tablename>|~<token>]");
|
||||||
exit 1
|
process.exit(exitcode);
|
||||||
fi
|
|
||||||
if test -z "${dbname}"; then
|
|
||||||
echo "Username ${username} unknown by redis on port ${REDIS_PORT} (try CARTODB/script/restore_redis?)" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Database name for user ${username}: ${dbname}" # only if verbose?
|
|
||||||
if test -n "$token"; then
|
|
||||||
rec=`redis-cli get "map_style|${dbname}|${token}"`
|
|
||||||
if test -z "${rec}"; then
|
|
||||||
echo "${token}: no such map style known by redis on port ${REDIS_PORT}" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
#echo "${rec}"
|
|
||||||
escrec=`echo "${rec}" | sed -e 's/\\\\/\\\\\\\\/g'`
|
|
||||||
#echo "${escrec}"
|
|
||||||
node <<EOF
|
|
||||||
var x=JSON.parse('${escrec}');
|
|
||||||
console.log('style: ' + x.style);
|
|
||||||
console.log('version: ' + x.version);
|
|
||||||
|
|
||||||
global.environment = require('${CONFIG}');
|
|
||||||
var serverOptions = require('${BASEDIR}/lib/cartodb/server_options'); // _after_ setting global.environment
|
|
||||||
var grainstore = require('${BASEDIR}/node_modules/windshaft/node_modules/grainstore/lib/grainstore');
|
|
||||||
var mml_store = new grainstore.MMLStore(serverOptions.redis, serverOptions.grainstore);
|
|
||||||
var builderconfig = {dbname:'${dbname}'};
|
|
||||||
if ( '${token}'.match(/^~/) ) {
|
|
||||||
builderconfig.token = '${token}'.substring(1);
|
|
||||||
} else {
|
|
||||||
builderconfig.table = '${token}';
|
|
||||||
}
|
}
|
||||||
var mml_builder = mml_store.mml_builder(builderconfig,
|
|
||||||
function(err, payload) {
|
var node_path = process.argv.shift();
|
||||||
|
var script_path = process.argv.shift();
|
||||||
|
var basedir = path.dirname(script_path);
|
||||||
|
var me = path.basename(script_path);
|
||||||
|
|
||||||
|
var ENV = 'development.js';
|
||||||
|
var username, token;
|
||||||
|
var arg;
|
||||||
|
while ( arg = process.argv.shift() ) {
|
||||||
|
if ( arg == '--env' ) {
|
||||||
|
ENV = process.argv.shift();
|
||||||
|
}
|
||||||
|
else if ( ! username ) {
|
||||||
|
username = arg;
|
||||||
|
}
|
||||||
|
else if ( ! token ) {
|
||||||
|
token = arg;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.warn("Unused parameter " + arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! username ) usage(me, 1);
|
||||||
|
|
||||||
|
console.log("Using environment " + ENV);
|
||||||
|
|
||||||
|
global.environment = require('../config/environments/' + ENV);
|
||||||
|
var serverOptions = require('../lib/cartodb/server_options'); // _after_ setting global.environment
|
||||||
|
|
||||||
|
var client;
|
||||||
|
var dbname;
|
||||||
|
Step(
|
||||||
|
function getClient() {
|
||||||
|
client = redis.createClient(serverOptions.redis.port, serverOptions.redis.host);
|
||||||
|
client.on('connect', this);
|
||||||
|
},
|
||||||
|
function getUserMeta(err) {
|
||||||
|
if ( err ) throw err;
|
||||||
|
client.select(5);
|
||||||
|
client.hgetall('rails:users:' + username, this);
|
||||||
|
},
|
||||||
|
function readDB(err, data) {
|
||||||
|
if ( err ) throw err;
|
||||||
|
if ( ! data )
|
||||||
|
throw new Error('Username ' + username + ' unknown by redis on port '
|
||||||
|
+ serverOptions.redis.port + ' (try CARTODB/script/restore_redis?)');
|
||||||
|
//console.log("Data:"); console.dir(data);
|
||||||
|
dbname = data['database_name'];
|
||||||
|
console.log("Database name for user " + username + ": " + dbname);
|
||||||
|
client.select(0);
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
function showTokens(err) {
|
||||||
|
if ( err ) throw err;
|
||||||
|
if ( token ) return null;
|
||||||
|
var next = this;
|
||||||
|
Step(
|
||||||
|
function getTokens() {
|
||||||
|
client.keys('map_style|' + dbname + '|*', this);
|
||||||
|
},
|
||||||
|
function showTokens(err, data) {
|
||||||
|
if (err) throw err;
|
||||||
|
if ( data ) console.log(data.join('\n'));
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
function showTokensFinish(err) {
|
||||||
|
next(err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
function showStyle(err) {
|
||||||
|
if ( err ) throw err;
|
||||||
|
if ( ! token ) return null;
|
||||||
|
var next = this;
|
||||||
|
Step(
|
||||||
|
function getStyle() {
|
||||||
|
client.get('map_style|' + dbname + '|' + token, this);
|
||||||
|
},
|
||||||
|
function showStyle(err, data) {
|
||||||
if ( err ) throw err;
|
if ( err ) throw err;
|
||||||
mml_builder.toXML(function(err, xml) {
|
if ( ! data ) {
|
||||||
if ( err ) throw err;
|
throw new Error(token + ': no such map style known by redis on port '
|
||||||
console.log('- XML - ');
|
+ serverOptions.redis.port);
|
||||||
console.log(xml);
|
}
|
||||||
});
|
//console.log("data: " + data);
|
||||||
});
|
var x=JSON.parse(data);
|
||||||
EOF
|
printMapnikStyle(x, this);
|
||||||
#echo "${rec}" | sed -e 's/\\n/\n/g' -e 's/\\//g'
|
},
|
||||||
else
|
function showStyleFinish(err) {
|
||||||
redis-cli keys "map_style|${dbname}|*"
|
next(err);
|
||||||
fi
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
function finish(err) {
|
||||||
|
if ( err ) {
|
||||||
|
console.error(err.message)
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
function printMapnikStyle(x, callback) {
|
||||||
|
console.log('style: ' + x.style);
|
||||||
|
console.log('version: ' + x.version);
|
||||||
|
var grainstore = require(basedir + '/../node_modules/windshaft/node_modules/grainstore/lib/grainstore');
|
||||||
|
var mml_store = new grainstore.MMLStore(serverOptions.redis, serverOptions.grainstore);
|
||||||
|
var builderconfig = {dbname:dbname};
|
||||||
|
if ( token.match(/^~/) ) {
|
||||||
|
builderconfig.token = token.substring(1);
|
||||||
|
} else {
|
||||||
|
builderconfig.table = token;
|
||||||
|
}
|
||||||
|
var mml_builder;
|
||||||
|
Step(
|
||||||
|
function getBuilder() {
|
||||||
|
mml_builder = mml_store.mml_builder(builderconfig, this);
|
||||||
|
},
|
||||||
|
function getXML(err, builder) {
|
||||||
|
if ( err ) throw err;
|
||||||
|
mml_builder.toXML(this);
|
||||||
|
},
|
||||||
|
function showXML(err, xml) {
|
||||||
|
if ( err ) throw err;
|
||||||
|
console.log('- XML - ');
|
||||||
|
console.log(xml);
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
function finish(err) {
|
||||||
|
callback(err);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user