Index: icepush/core/src/main/java/org/icepush/servlet/HasNotifyBackURI.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- icepush/core/src/main/java/org/icepush/servlet/HasNotifyBackURI.java (revision ) +++ icepush/core/src/main/java/org/icepush/servlet/HasNotifyBackURI.java (revision ) @@ -0,0 +1,59 @@ +/* + * Copyright 2004-2014 ICEsoft Technologies Canada Corp. + * + * 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. + */ + +package org.icepush.servlet; + +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.icepush.Browser; +import org.icepush.PushContext; + +public class HasNotifyBackURI +extends AbstractPseudoServlet +implements PseudoServlet { + private static final Logger LOGGER = Logger.getLogger(HasNotifyBackURI.class.getName()); + + private final PushContext pushContext; + + public HasNotifyBackURI(final PushContext pushContext) { + this.pushContext = pushContext; + } + + public void service(final HttpServletRequest request, final HttpServletResponse response) + throws Exception { + String _browserID = Browser.getBrowserID(request); + if (LOGGER.isLoggable(Level.FINE)) { + LOGGER.log( + Level.FINE, + "Removing Notify-Back-URI from Browser '" + _browserID + "'." + ); + } + response.setContentType("text/plain"); + response.getWriter().print(hasNotifyBackURI(_browserID)); + } + + protected final PushContext getPushContext() { + return pushContext; + } + + protected boolean hasNotifyBackURI(final String browserID) { + return getPushContext().hasNotifyBackURI(browserID); + } +} Index: icepush/core/src/main/javascript/application.js IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- icepush/core/src/main/javascript/application.js (revision 48616) +++ icepush/core/src/main/javascript/application.js (revision ) @@ -232,6 +232,16 @@ var currentNotifications = []; var apiChannel = Client(true); + function commonParameters(query) { + try { + parameter(query, BrowserIDName, lookupCookieValue(BrowserIDName)); + } catch (e) { + //skip sending browser ID when not yet defined + } + parameter(query, Account, ice.push.configuration.account); + parameter(query, Realm, ice.push.configuration.realm); + parameter(query, AccessToken, ice.push.configuration.access_token); + } //public API namespace.uriextension = ''; namespace.push = { @@ -261,16 +271,7 @@ createPushId: function(retries, callback) { var uri = resolveURI(namespace.push.configuration.createPushIdURI || 'create-push-id.icepush'); - postAsynchronously(apiChannel, uri, function (query) { - try { - parameter(query, BrowserIDName, lookupCookieValue(BrowserIDName)); - } catch (e) { - //skip sending browser ID when not yet defined - } - parameter(query, Account, ice.push.configuration.account); - parameter(query, Realm, ice.push.configuration.realm); - parameter(query, AccessToken, ice.push.configuration.access_token); - }, FormPost, $witch(function (condition) { + postAsynchronously(apiChannel, uri, commonParameters, FormPost, $witch(function (condition) { condition(OK, function(response) { if (isXMLResponse(response)) { if (retries && retries > 1) { @@ -292,10 +293,7 @@ notify: function(group, payload, options) { var uri = resolveURI(namespace.push.configuration.notifyURI || 'notify.icepush'); postAsynchronously(apiChannel, uri, function(q) { - parameter(q, BrowserIDName, lookupCookieValue(BrowserIDName)); - parameter(q, Account, ice.push.configuration.account); - parameter(q, Realm, ice.push.configuration.realm); - parameter(q, AccessToken, ice.push.configuration.access_token); + commonParameters(q); parameter(q, 'group', group); if (payload) { parameter(q, 'payload', payload); @@ -337,10 +335,7 @@ addGroupMember: function(group, id, options) { var uri = resolveURI(namespace.push.configuration.addGroupMemberURI || 'add-group-member.icepush'); postAsynchronously(apiChannel, uri, function(q) { - parameter(q, BrowserIDName, lookupCookieValue(BrowserIDName)); - parameter(q, Account, ice.push.configuration.account); - parameter(q, Realm, ice.push.configuration.realm); - parameter(q, AccessToken, ice.push.configuration.access_token); + commonParameters(q); parameter(q, 'group', group); parameter(q, 'id', id); if (options) { @@ -358,10 +353,7 @@ removeGroupMember: function(group, id) { var uri = resolveURI(namespace.push.configuration.removeGroupMemberURI || 'remove-group-member.icepush'); postAsynchronously(apiChannel, uri, function(q) { - parameter(q, BrowserIDName, lookupCookieValue(BrowserIDName)); - parameter(q, Account, ice.push.configuration.account); - parameter(q, Realm, ice.push.configuration.realm); - parameter(q, AccessToken, ice.push.configuration.access_token); + commonParameters(q); parameter(q, 'group', group); parameter(q, 'id', id); }, FormPost, $witch(function(condition) { @@ -369,12 +361,40 @@ })); }, + addNotifyBackURI: function(notifyBackURI) { + var uri = resolveURI(namespace.push.configuration.addNotifyBackURIURI || 'add-notify-back-uri.icepush'); + postAsynchronously(apiChannel, uri, function(q) { + commonParameters(q); + parameter(q, 'notifyBackURI', notifyBackURI); + }, FormPost, $witch(function(condition) { + condition(ServerInternalError, throwServerError); + })); + }, + + removeNotifyBackURI: function() { + var uri = resolveURI(namespace.push.configuration.removeNotifyBackURIURI || 'remove-notify-back-uri.icepush'); + postAsynchronously(apiChannel, uri, commonParameters, FormPost, $witch(function(condition) { + condition(ServerInternalError, throwServerError); + })); + }, + + hasNotifyBackURI: function() { + var uri = resolveURI(namespace.push.configuration.hasNotifyBackURIURI || 'has-notify-back-uri.icepush'); + var result; + postSynchronously(apiChannel, uri, commonParameters, FormPost, $witch(function(condition) { + condition(OK, function(response) { + var content = contentAsText(response); + result = content ? toLowerCase(content) == 'true' : false; + }); + condition(ServerInternalError, throwServerError); + })); + + return result; + }, + get: function(uri, parameters, responseCallback) { getAsynchronously(apiChannel, uri, function(query) { - parameter(query, BrowserIDName, lookupCookieValue(BrowserIDName)); - parameter(query, Account, ice.push.configuration.account); - parameter(query, Realm, ice.push.configuration.realm); - parameter(query, AccessToken, ice.push.configuration.access_token); + commonParameters(q); parameters(curry(parameter, query)); }, noop, $witch(function(condition) { condition(OK, function(response) { @@ -386,10 +406,7 @@ post: function(uri, parameters, responseCallback) { postAsynchronously(apiChannel, uri, function(query) { - parameter(query, BrowserIDName, lookupCookieValue(BrowserIDName)); - parameter(query, Account, ice.push.configuration.account); - parameter(query, Realm, ice.push.configuration.realm); - parameter(query, AccessToken, ice.push.configuration.access_token); + commonParameters(q); parameters(curry(parameter, query)); }, FormPost, $witch(function(condition) { condition(OK, function(response) {