Added: incubator/shindig/trunk/php/js/json.js
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/js/json.js?rev=606463&view=auto
=
=
=
=
=
=
=
=
=
=====================================================================
--- incubator/shindig/trunk/php/js/json.js (added)
+++ incubator/shindig/trunk/php/js/json.js Sat Dec 22 08:11:57 2007
@@ -0,0 +1,319 @@
+/*
+ json.js
+ 2007-10-10
+
+ Public Domain
+
+ This file adds these methods to JavaScript:
+
+ array.toJSONString(whitelist)
+ boolean.toJSONString()
+ date.toJSONString()
+ number.toJSONString()
+ object.toJSONString(whitelist)
+ string.toJSONString()
+ These methods produce a JSON text from a JavaScript
value.
+ It must not contain any cyclical references. Illegal
values
+ will be excluded.
+
+ The default conversion for dates is to an ISO string.
You can
+ add a toJSONString method to any date object to get a
different
+ representation.
+
+ The object and array methods can take an optional
whitelist
+ argument. A whitelist is an array of strings. If it is
provided,
+ keys in objects not found in the whitelist are excluded.
+
+ string.parseJSON(filter)
+ This method parses a JSON text to produce an object or
+ array. It can throw a SyntaxError exception.
+
+ The optional filter parameter is a function which can
filter
and
+ transform the results. It receives each of the keys and
values, and
+ its return value is used instead of the original
value. If it
+ returns what it received, then structure is not
modified. If
it
+ returns undefined then the member is deleted.
+
+ Example:
+
+ // Parse the text. If a key contains the string 'date'
then
+ // convert the value to a date.
+
+ myData = text.parseJSON(function (key, value) {
+ return key.indexOf('date') >= 0 ? new Date(value) :
value;
+ });
+
+ It is expected that these methods will formally become part of
the
+ JavaScript Programming Language in the Fourth Edition of the
+ ECMAScript standard in 2008.
+
+ This file will break programs with improper for..in loops. See
+ http://yuiblog.com/blog/2006/09/26/for-in-intrigue/
+
+ This is a reference implementation. You are free to copy,
modify, or
+ redistribute.
+
+ Use your own copy. It is extremely unwise to load untrusted
third
party
+ code into your pages.
+*/
+
+/*jslint evil: true */
+
+// Augment the basic prototypes if they have not already been
augmented.
+
+if (!Object.prototype.toJSONString) {
+
+ Array.prototype.toJSONString = function (w) {
+ var a = [], // The array holding the partial texts.
+ i, // Loop counter.
+ l = this.length,
+ v; // The value to be stringified.
+
+// For each value in this array...
+
+ for (i = 0; i < l; i += 1) {
+ v = this[i];
+ switch (typeof v) {
+ case 'object':
+
+// Serialize a JavaScript object value. Treat objects thats lack the
+// toJSONString method as null. Due to a specification error in
ECMAScript,
+// typeof null is 'object', so watch out for that case.
+
+ if (v && typeof v.toJSONString === 'function') {
+ a.push(v.toJSONString(w));
+ } else {
+ a.push('null');
+ }
+ break;
+
+ case 'string':
+ case 'number':
+ case 'boolean':
+ a.push(v.toJSONString());
+ break;
+ default:
+ a.push('null');
+ }
+ }
+
+// Join all of the member texts together and wrap them in brackets.
+
+ return '[' + a.join(',') + ']';
+ };
+
+
+ Boolean.prototype.toJSONString = function () {
+ return String(this);
+ };
+
+
+ Date.prototype.toJSONString = function () {
+
+// Eventually, this method will be based on the date.toISOString
method.
+
+ function f(n) {
+
+// Format integers to have at least two digits.
+
+ return n < 10 ? '0' + n : n;
+ }
+
+ return '"' + this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z"';
+ };
+
+
+ Number.prototype.toJSONString = function () {
+
+// JSON numbers must be finite. Encode non-finite numbers as null.
+
+ return isFinite(this) ? String(this) : 'null';
+ };
+
+
+ Object.prototype.toJSONString = function (w) {
+ var a = [], // The array holding the partial texts.
+ k, // The current key.
+ i, // The loop counter.
+ v; // The current value.
+
+// If a whitelist (array of keys) is provided, use it assemble the
components
+// of the object.
+
+ if (w) {
+ for (i = 0; i < w.length; i += 1) {
+ k = w[i];
+ if (typeof k === 'string') {
+ v = this[k];
+ switch (typeof v) {
+ case 'object':
+
+// Serialize a JavaScript object value. Ignore objects that lack the
+// toJSONString method. Due to a specification error in ECMAScript,
+// typeof null is 'object', so watch out for that case.
+
+ if (v) {
+ if (typeof v.toJSONString ===
'function') {
+ a.push(k.toJSONString() + ':' +
+ v.toJSONString(w));
+ }
+ } else {
+ a.push(k.toJSONString() + ':null');
+ }
+ break;
+
+ case 'string':
+ case 'number':
+ case 'boolean':
+ a.push(k.toJSONString() + ':' +
v.toJSONString
());
+
+// Values without a JSON representation are ignored.
+
+ }
+ }
+ }
+ } else {
+
+// Iterate through all of the keys in the object, ignoring the proto
chain
+// and keys that are not strings.
+
+ for (k in this) {
+ if (typeof k === 'string' &&
+
Object.prototype.hasOwnProperty.apply(this, [k]))
{
+ v = this[k];
+ switch (typeof v) {
+ case 'object':
+
+// Serialize a JavaScript object value. Ignore objects that lack the
+// toJSONString method. Due to a specification error in ECMAScript,
+// typeof null is 'object', so watch out for that case.
+
+ if (v) {
+ if (typeof v.toJSONString ===
'function') {
+ a.push(k.toJSONString() + ':' +
+ v.toJSONString());
+ }
+ } else {
+ a.push(k.toJSONString() + ':null');
+ }
+ break;
+
+ case 'string':
+ case 'number':
+ case 'boolean':
+ a.push(k.toJSONString() + ':' +
v.toJSONString
());
+
+// Values without a JSON representation are ignored.
+
+ }
+ }
+ }
+ }
+
+// Join all of the member texts together and wrap them in braces.
+
+ return '{' + a.join(',') + '}';
+ };
+
+
+ (function (s) {
+
+// Augment String.prototype. We do this in an immediate anonymous
function to
+// avoid defining global variables.
+
+// m is a table of character substitutions.
+
+ var m = {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"' : '\\"',
+ '\\': '\\\\'
+ };
+
+
+ s.parseJSON = function (filter) {
+ var j;
+
+ function walk(k, v) {
+ var i, n;
+ if (v && typeof v === 'object') {
+ for (i in v) {
+ if (Object.prototype.hasOwnProperty.apply(v,
[i])) {
+ n = walk(i, v[i]);
+ if (n !== undefined) {
+ v[i] = n;
+ }
+ }
+ }
+ }
+ return filter(k, v);
+ }
+
+
+// Parsing happens in three stages. In the first stage, we run the
text
against
+// a regular expression which looks for non-JSON characters. We are
especially
+// concerned with '()' and 'new' because they can cause
invocation, and
'='
+// because it can cause mutation. But just to be safe, we will
reject all
+// unexpected characters.
+
+// We split the first stage into 4 regexp operations in order to
work
around
+// crippling deficiencies in IE's and Safari's regexp engines.
First we
replace
+// all backslash pairs with '@' (a non-JSON character). Second, we
replace all
+// simple value tokens with ']' characters. Third, we delete all
open
brackets
+// that follow a colon or comma or that begin the text. Finally,
we look
to see
+// that the remaining characters are only whitespace or ']' or ','
or ':'
or '{'
+// or '}'. If that is so, then the text is safe for eval.
+
+ if (/^[\],:{}\s]*$/.test(this.replace(/\\./g, '@').
+
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(:?[eE][+\-]?
\d+)?/g,
']').
+ replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+
+// In the second stage we use the eval function to compile the
text into
a
+// JavaScript structure. The '{' operator is subject to a syntactic
ambiguity
+// in JavaScript: it can begin a block or an object literal. We
wrap the
text
+// in parens to eliminate the ambiguity.
+
+ j = eval('(' + this + ')');
+
+// In the optional third stage, we recursively walk the new
structure,
passing
+// each name/value pair to a filter function for possible
transformation.
+
+ return typeof filter === 'function' ? walk('',
j) : j;
+ }
+
+// If the text is not JSON parseable, then a SyntaxError is thrown.
+
+ throw new SyntaxError('parseJSON');
+ };
+
+
+ s.toJSONString = function () {
+
+// If the string contains no control characters, no quote
characters, and
no
+// backslash characters, then we can simply slap some quotes
around it.
+// Otherwise we must also replace the offending characters with safe
+// sequences.
+
+ if (/["\\\x00-\x1f]/.test(this)) {
+ return '"' + this.replace(/[\x00-\x1f\\"]/g,
function (a)
{
+ var c = m[a];
+ if (c) {
+ return c;
+ }
+ c = a.charCodeAt();
+ return '\\u00' + Math.floor(c /
16).toString(16) +
+ (c %
16).toString(16);
+ }) + '"';
+ }
+ return '"' + this + '"';
+ };
+ })(String.prototype);
+}
\ No newline at end of file
Added: incubator/shindig/trunk/php/key-modulo
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/key-modulo?rev=606463&view=auto
=
=
=
=
=
=
=
=
=
=====================================================================
--- incubator/shindig/trunk/php/key-modulo (added)
+++ incubator/shindig/trunk/php/key-modulo Sat Dec 22 08:11:57 2007
@@ -0,0 +1 @@
+1004152471828278089
\ No newline at end of file
Added: incubator/shindig/trunk/php/key-private
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/key-private?rev=606463&view=auto
=
=
=
=
=
=
=
=
=
=====================================================================
--- incubator/shindig/trunk/php/key-private (added)
+++ incubator/shindig/trunk/php/key-private Sat Dec 22 08:11:57 2007
@@ -0,0 +1 @@
+365146352663319971
\ No newline at end of file
Added: incubator/shindig/trunk/php/key-public
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/key-public?rev=606463&view=auto
=
=
=
=
=
=
=
=
=
=====================================================================
--- incubator/shindig/trunk/php/key-public (added)
+++ incubator/shindig/trunk/php/key-public Sat Dec 22 08:11:57 2007
@@ -0,0 +1 @@
+11
\ No newline at end of file
Added: incubator/shindig/trunk/php/proxy.php
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/php/proxy.php?rev=606463&view=auto
=
=
=
=
=
=
=
=
=
=====================================================================
--- incubator/shindig/trunk/php/proxy.php (added)
+++ incubator/shindig/trunk/php/proxy.php Sat Dec 22 08:11:57 2007
@@ -0,0 +1,74 @@
+<?php
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
+ * See the License for the specific language governing permissions
and
+ * limitations under the License.
+ */
+?><?php
+function errorPage($code, $message) {
+ header("Status: $code");
+ header("Content-Type: text/plain");
+ echo $message;
+}
+
+error_log('----------------------------starting API
call-----------------------------------');
+$op = $_POST['op'];
+if (!$op || $op == '') {
+ //try from GET
+ $op = $_GET['op'];
+}
+
+$appOrigin = $_POST['origin'];
+if (preg_match('@[\W]@', $appOrigin)) {
+ errorPage(400, 'Bogus origin param');
+ return;
+}
+
+$curl = curl_init();
+
+if ($op == 'proxy') {
+ $url = $_GET['url'];
+ curl_setopt($curl,CURLOPT_GET,true);
+}
+else if ($appOrigin){
+ $url = 'http://' . $appOrigin . XN_AtomHelper::
$DOMAIN_SUFFIX .
'/gadgets/index/backendApi';
+ curl_setopt($curl,CURLOPT_POST,true);
+ curl_setopt($curl,CURLOPT_POSTFIELDS,$_POST);
+}
+else {
+ error_log("Bogus API call: $appOrigin -> $op");
+ return;
+}
+
+error_log('api: url=' . $url);
+
+curl_setopt($curl,CURLOPT_USERAGENT,"Mozilla/4.0 (Compatible;
Shindig
Auth)");
+curl_setopt($curl, CURLOPT_TIMEOUT, 30);
+curl_setopt($curl, CURLOPT_MAXREDIRS, 5);
+curl_setopt($curl,CURLOPT_URL,$url);
+ob_start();
+$result = curl_exec($curl);
+if ($result == false) {
+ $errno = curl_errno($curl);
+ error_log("Error excuting api request $op $appOrigin $url :
$errno");
+ header("HTTP/1.1 500 Error");
+ echo "Error executing request";
+}
+$data = ob_get_contents();
+ob_end_clean();
+
+$retcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
+curl_close($curl);
+header('Content-Type: text/plain');
+echo $data;
+error_log('----------------------------END API
call-----------------------------------');
+
+?>