| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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. |
| */ |
| |
| // Default container configuration. To change the configuration, you have two options: |
| // |
| // A. If you run the Java server: Create your own "myContainer.js" file and |
| // modify the value in web.xml. |
| // |
| // B. If you run the PHP server: Create a myContainer.js, copy the contents of container.js to it, |
| // change |
| // {"gadgets.container" : ["default"], |
| // to |
| // {"gadgets.container" : ["myContainer"], |
| // And make your changes that you need to myContainer.js. |
| // Just make sure on the iframe URL you specify &container=myContainer |
| // for it to use that config. |
| // |
| // All configurations will automatically inherit values from this |
| // config, so you only need to provide configuration for items |
| // that you require explicit special casing for. |
| // |
| // Please namespace your attributes using the same conventions |
| // as you would for javascript objects, e.g. gadgets.features |
| // rather than "features". |
| |
| // NOTE: Please _don't_ leave trailing commas because the php json parser |
| // errors out on this. |
| |
| // Container must be an array; this allows multiple containers |
| // to share configuration. |
| |
| // Note that you can embed values directly or you can choose to have values read from a file on disk |
| // or read from the classpath ("foo-key" : "file:///foo-file.txt" || "foo-key" : "res://foo-file.txt") |
| // TODO: Move out accel container config into a separate accel.js file. |
| {"gadgets.container" : ["default", "accel"], |
| |
| // Set of regular expressions to validate the parent parameter. This is |
| // necessary to support situations where you want a single container to support |
| // multiple possible host names (such as for localized domains, such as |
| // <language>.example.org. If left as null, the parent parameter will be |
| // ignored; otherwise, any requests that do not include a parent |
| // value matching this set will return a 404 error. |
| "gadgets.parent" : null, |
| |
| // Origins for CORS requests and/or Referer validation |
| // Indicate a set of origins or an entry with * to indicate that all origins are allowed |
| "gadgets.parentOrigins" : ["*"], |
| |
| // Various urls generated throughout the code base. |
| // iframeBaseUri will automatically have the host inserted |
| // if locked domain is enabled and the implementation supports it. |
| // query parameters will be added. |
| "gadgets.iframeBaseUri" : "${CONTEXT_ROOT}/gadgets/ifr", |
| "gadgets.uri.iframe.basePath" : "${CONTEXT_ROOT}/gadgets/ifr", |
| |
| // Callback URL. Scheme relative URL for easy switch between https/http. |
| "gadgets.uri.oauth.callbackTemplate" : "//%host%${CONTEXT_ROOT}/gadgets/oauthcallback", |
| |
| // Config param to load Opensocial data for social |
| // preloads in data pipelining. %host% will be |
| // substituted with the current host. |
| "gadgets.osDataUri" : "//%host%${CONTEXT_ROOT}/rpc", |
| |
| // Use an insecure security token by default |
| "gadgets.securityTokenType" : "insecure", |
| |
| // Uncomment the securityTokenType and one of the securityTokenKey's to switch to a secure version. |
| // Note that you can choose to use an embedded key, a filesystem reference or a classpath reference. |
| // The best way to generate a key is to do something like this: |
| // dd if=/dev/random bs=32 count=1 | openssl base64 |
| // |
| //"gadgets.securityTokenType" : "secure", |
| //"gadgets.securityTokenKey" : "default-insecure-embedded-key", |
| //"gadgets.securityTokenKey" : "file:///path/to/key/file.txt", |
| //"gadgets.securityTokenKey" : "res://some-file-on-the-classpath.txt", |
| |
| // OS 2.0 Gadget DOCTYPE: used in Gadgets with @specificationVersion 2.0 or greater and |
| // quirksmode on Gadget has not been set. |
| "gadgets.doctype_qname" : "HTML", //HTML5 doctype |
| "gadgets.doctype_pubid" : "", |
| "gadgets.doctype_sysid" : "", |
| |
| // In a locked domain config, these can remain as-is in order to have requests encountered use the |
| // host they came in on (locked host). |
| "default.domain.locked.client" : "%host%", |
| "default.domain.locked.server" : "%authority%", |
| |
| // IMPORTANT: EDITME: In a locked domain configuration, these should be changed to explicit values of |
| // your unlocked host. You should not use %host% or %authority% replacements or these defaults in a |
| // locked domain deployment. |
| // Both of these values will likely be identical in a real locked domain deployment. |
| "default.domain.unlocked.client" : "${Cur['default.domain.locked.client']}", |
| "default.domain.unlocked.server" : "${Cur['default.domain.locked.server']}", |
| |
| // You can change this if you wish unlocked gadgets to render on a different domain from the default. |
| "gadgets.uri.iframe.unlockedDomain" : "${Cur['default.domain.unlocked.server']}", // DNS domain on which *unlocked* gadgets should render. |
| |
| // IMPORTANT: EDITME: In a locked domain configuration, this suffix should be provided explicitly. |
| // It is recommended that it be a separate top-level-domain (TLD) than the unlocked TLD. |
| // You should not use replacement here (avoid %authority%) |
| // Example: unlockedDomain="shindig.example.com" lockedDomainSuffix="-locked.example-gadgets.com" |
| "gadgets.uri.iframe.lockedDomainSuffix" : "${Cur['default.domain.locked.server']}", // DNS domain on which *locked* gadgets should render. |
| |
| // Should all gadgets be forced on to a locked domain? |
| "gadgets.uri.iframe.lockedDomainRequired" : false, |
| |
| // The permitted domain where the render request is sent from. For examle: ["www.hostA.com", "www.hostB.com"] |
| // Empty means all domains are permitted. |
| "shindig.locked-domain.permittedRefererDomains" : [], |
| |
| // Default Js Uri config: also must be overridden. |
| // gadgets.uri.js.host should be protocol relative. |
| "gadgets.uri.js.host" : "//${Cur['default.domain.unlocked.server']}", // Use unlocked host for better caching. |
| |
| // If you change the js.path you will need to define window.__CONTAINER_SCRIPT_ID prior to loading the <script> |
| // tag for container JavaScript into the DOM. |
| "gadgets.uri.js.path" : "${CONTEXT_ROOT}/gadgets/js", |
| |
| // Default concat Uri config; used for testing. |
| "gadgets.uri.concat.host" : "${Cur['default.domain.unlocked.server']}", // Use unlocked host for better caching. |
| "gadgets.uri.concat.path" : "${CONTEXT_ROOT}/gadgets/concat", |
| "gadgets.uri.concat.js.splitToken" : "false", |
| |
| // Default proxy Uri config; used for testing. |
| "gadgets.uri.proxy.host" : "${Cur['default.domain.unlocked.server']}", // Use unlocked host for better caching. |
| "gadgets.uri.proxy.path" : "${CONTEXT_ROOT}/gadgets/proxy", |
| |
| // Enables/Disables feature administration |
| "gadgets.admin.enableFeatureAdministration" : false, |
| |
| // Enables whitelist checks |
| "gadgets.admin.enableGadgetWhitelist" : false, |
| |
| // Max post size for posts through the makeRequest proxy. |
| "gadgets.jsonProxyUrl.maxPostSize" : 5242880, // 5 MiB |
| |
| // This config data will be passed down to javascript. Please |
| // configure your object using the feature name rather than |
| // the javascript name. |
| |
| // Only configuration for required features will be used. |
| // See individual feature.xml files for configuration details. |
| "gadgets.features" : { |
| "core.io" : { |
| // Note: ${Cur['gadgets.uri.proxy.path']} is an open proxy. Be careful how you expose this! |
| // Note: These urls should be protocol relative (start with //) |
| "proxyUrl" : "//${Cur['default.domain.unlocked.client']}${Cur['gadgets.uri.proxy.path']}%filename%?container=%container%&refresh=%refresh%&url=%url%%authz%%rewriteMime%", |
| "jsonProxyUrl" : "//${Cur['default.domain.locked.client']}${CONTEXT_ROOT}/gadgets/makeRequest", |
| // Note: this setting MUST be supplied in every container config object, as there is no default if it is not supplied. |
| "unparseableCruft" : "throw 1; < don't be evil' >", |
| |
| // This variable is needed during the config init to parse config augmentation |
| "jsPath" : "${Cur['gadgets.uri.js.path']}", |
| |
| // interval in milliseconds used to poll xhr request for the readyState |
| "xhrPollIntervalMs" : 50 |
| }, |
| "views" : { |
| "profile" : { |
| "isOnlyVisible" : false, |
| "urlTemplate" : "http://localhost${CONTEXT_ROOT}/gadgets/profile?{var}", |
| "aliases": ["DASHBOARD", "default"] |
| }, |
| "canvas" : { |
| "isOnlyVisible" : true, |
| "urlTemplate" : "http://localhost${CONTEXT_ROOT}/gadgets/canvas?{var}", |
| "aliases" : ["FULL_PAGE"] |
| }, |
| "default" : { |
| "isOnlyVisible" : false, |
| "urlTemplate" : "http://localhost${CONTEXT_ROOT}/gadgets/default?{var}", |
| "aliases" : ["home", "profile", "canvas"] |
| }, |
| "embedded" : { |
| "isOnlyVisible" : false, |
| "urlTemplate" : "http://localhost${CONTEXT_ROOT}/gadgets/embedded?{var}", |
| "aliases" : ["embedded"] |
| } |
| }, |
| "tabs": { |
| "css" : [ |
| ".tablib_table {", |
| "width: 100%;", |
| "border-collapse: separate;", |
| "border-spacing: 0px;", |
| "empty-cells: show;", |
| "font-size: 11px;", |
| "text-align: center;", |
| "}", |
| ".tablib_emptyTab {", |
| "border-bottom: 1px solid #676767;", |
| "padding: 0px 1px;", |
| "}", |
| ".tablib_spacerTab {", |
| "border-bottom: 1px solid #676767;", |
| "padding: 0px 1px;", |
| "width: 1px;", |
| "}", |
| ".tablib_selected {", |
| "padding: 2px;", |
| "background-color: #ffffff;", |
| "border: 1px solid #676767;", |
| "border-bottom-width: 0px;", |
| "color: #3366cc;", |
| "font-weight: bold;", |
| "width: 80px;", |
| "cursor: default;", |
| "}", |
| ".tablib_unselected {", |
| "padding: 2px;", |
| "background-color: #dddddd;", |
| "border: 1px solid #aaaaaa;", |
| "border-bottom-color: #676767;", |
| "color: #000000;", |
| "width: 80px;", |
| "cursor: pointer;", |
| "}", |
| ".tablib_navContainer {", |
| "width: 10px;", |
| "vertical-align: middle;", |
| "}", |
| ".tablib_navContainer a:link, ", |
| ".tablib_navContainer a:visited, ", |
| ".tablib_navContainer a:hover {", |
| "color: #3366aa;", |
| "text-decoration: none;", |
| "}" |
| ] |
| }, |
| "minimessage": { |
| "css": [ |
| ".mmlib_table {", |
| "width: 100%;", |
| "font: bold 9px arial,sans-serif;", |
| "background-color: #fff4c2;", |
| "border-collapse: separate;", |
| "border-spacing: 0px;", |
| "padding: 1px 0px;", |
| "}", |
| ".mmlib_xlink {", |
| "font: normal 1.1em arial,sans-serif;", |
| "font-weight: bold;", |
| "color: #0000cc;", |
| "cursor: pointer;", |
| "}" |
| ] |
| }, |
| "rpc" : { |
| // Path to the relay file. Automatically appended to the parent |
| // parameter if it passes input validation and is not null. |
| // This should never be on the same host in a production environment! |
| // Only use this for TESTING! |
| "parentRelayUrl" : "/container/rpc_relay.html", |
| |
| // If true, this will use the legacy ifpc wire format when making rpc |
| // requests. |
| "useLegacyProtocol" : false, |
| |
| // Path to the cross-domain enabling SWF for rpc's Flash transport. |
| "commSwf": "/xpc.swf", |
| "passReferrer": "c2p:query" |
| }, |
| // Skin defaults |
| "skins" : { |
| "properties" : { |
| "BG_COLOR": "", |
| "BG_IMAGE": "", |
| "BG_POSITION": "", |
| "BG_REPEAT": "", |
| "FONT_COLOR": "", |
| "ANCHOR_COLOR": "" |
| } |
| }, |
| "opensocial" : { |
| // Path to fetch opensocial data from |
| // Must be on the same domain as the gadget rendering server |
| "path" : "//%host%${CONTEXT_ROOT}/rpc", |
| // Path to issue invalidate calls |
| "invalidatePath" : "//%host%${CONTEXT_ROOT}/rpc", |
| "domain" : "shindig", |
| "enableCaja" : false, |
| "supportedFields" : { |
| "person" : ["id", {"name" : ["familyName", "givenName", "unstructured"]}, "thumbnailUrl", "profileUrl"], |
| "group" : ["id", "title", "description"], |
| "activity" : ["appId", "body", "bodyId", "externalId", "id", "mediaItems", "postedTime", "priority", |
| "streamFaviconUrl", "streamSourceUrl", "streamTitle", "streamUrl", "templateParams", "title", |
| "url", "userId"], |
| "activityEntry" : ["actor", "content", "generator", "icon", "id", "object", "published", "provider", "target", |
| "title", "updated", "url", "verb", "openSocial", "extensions"], |
| "album" : ["id", "thumbnailUrl", "title", "description", "location", "ownerId"], |
| "mediaItem" : ["album_id", "created", "description", "duration", "file_size", "id", "language", "last_updated", |
| "location", "mime_type", "num_comments", "num_views", "num_votes", "rating", "start_time", |
| "tagged_people", "tags", "thumbnail_url", "title", "type", "url"] |
| } |
| }, |
| "osapi.services" : { |
| // Specifying a binding to "container.listMethods" instructs osapi to dynamicaly introspect the services |
| // provided by the container and delay the gadget onLoad handler until that introspection is |
| // complete. |
| // Alternatively a container can directly configure services here rather than having them |
| // introspected. Simply list out the available servies and omit "container.listMethods" to |
| // avoid the initialization delay caused by gadgets.rpc |
| // E.g. "gadgets.rpc" : ["activities.requestCreate", "messages.requestSend", "requestShareApp", "requestPermission"] |
| "gadgets.rpc" : ["container.listMethods"] |
| }, |
| "osapi" : { |
| // The endpoints to query for available JSONRPC/REST services |
| "endPoints" : [ "//%host%${CONTEXT_ROOT}/rpc" ] |
| }, |
| "osml": { |
| // OSML library resource. Can be set to null or the empty string to disable OSML |
| // for a container. |
| "library": "config/OSML_library.xml" |
| }, |
| "shindig-container": { |
| "serverBase": "${CONTEXT_ROOT}/gadgets/" |
| }, |
| "container" : { |
| "relayPath": "${CONTEXT_ROOT}/gadgets/files/container/rpc_relay.html", |
| |
| //Enables/Disables the RPC arbitrator functionality in the common container |
| "enableRpcArbitration": false, |
| |
| // This variable is needed during the container feature init. |
| "jsPath" : "${Cur['gadgets.uri.js.path']}" |
| } |
| } |
| } |