def initPushNotificationService(self, configurationAttributes): print "Super-Gluu. Initialize notification services" if not configurationAttributes.containsKey("credentials_file"): return False super_gluu_creds_file = configurationAttributes.get( "credentials_file").getValue2() # Load credentials from file f = open(super_gluu_creds_file, 'r') try: creds = json.loads(f.read()) except: print "Super-Gluu. Initialize notification services. Failed to load credentials from file:", super_gluu_creds_file return False finally: f.close() try: android_creds = creds["android"]["gcm"] ios_creads = creds["ios"]["apns"] except: print "Super-Gluu. Initialize notification services. Invalid credentials file '%s' format:" % super_gluu_creds_file return False self.pushAndroidService = None self.pushAppleService = None if android_creds["enabled"]: self.pushAndroidService = Sender(android_creds["api_key"]) print "Super-Gluu. Initialize notification services. Created Android notification service" if ios_creads["enabled"]: p12_file_path = ios_creads["p12_file_path"] p12_passowrd = ios_creads["p12_password"] try: stringEncrypter = StringEncrypter.defaultInstance() p12_passowrd = stringEncrypter.decrypt(p12_passowrd) except: # Ignore exception. Password is not encrypted print "Super-Gluu. Initialize notification services. Assuming that 'p12_passowrd' password in not encrypted" apnsServiceBuilder = APNS.newService().withCert( p12_file_path, p12_passowrd) if ios_creads["production"]: self.pushAppleService = apnsServiceBuilder.withProductionDestination( ).build() else: self.pushAppleService = apnsServiceBuilder.withSandboxDestination( ).build() print "Super-Gluu. Initialize notification services. Created iOS notification service" enabled = self.pushAndroidService != None or self.pushAppleService != None return enabled
def initPushNotificationService(self, configurationAttributes): print "Super-Gluu. Initialize notification services" if not configurationAttributes.containsKey("credentials_file"): return False super_gluu_creds_file = configurationAttributes.get("credentials_file").getValue2() # Load credentials from file f = open(super_gluu_creds_file, 'r') try: creds = json.loads(f.read()) except: print "Super-Gluu. Initialize notification services. Failed to load credentials from file:", super_gluu_creds_file return False finally: f.close() try: android_creds = creds["android"]["gcm"] ios_creads = creds["ios"]["apns"] except: print "Super-Gluu. Initialize notification services. Invalid credentials file '%s' format:" % super_gluu_creds_file return False self.pushAndroidService = None self.pushAppleService = None if android_creds["enabled"]: self.pushAndroidService = Sender(android_creds["api_key"]) print "Super-Gluu. Initialize notification services. Created Android notification service" if ios_creads["enabled"]: p12_file_path = ios_creads["p12_file_path"] p12_passowrd = ios_creads["p12_password"] try: stringEncrypter = StringEncrypter.defaultInstance() p12_passowrd = stringEncrypter.decrypt(p12_passowrd) except: # Ignore exception. Password is not encrypted print "Super-Gluu. Initialize notification services. Assuming that 'p12_passowrd' password in not encrypted" apnsServiceBuilder = APNS.newService().withCert(p12_file_path, p12_passowrd) if ios_creads["production"]: self.pushAppleService = apnsServiceBuilder.withProductionDestination().build() else: self.pushAppleService = apnsServiceBuilder.withSandboxDestination().build() print "Super-Gluu. Initialize notification services. Created iOS notification service" enabled = self.pushAndroidService != None or self.pushAppleService != None return enabled
def sendApplePushNativeNotification(self, pushNotificationContext): title = self.titleTemplate message = self.messageTemplate % pushNotificationContext.appId push_token = pushNotificationContext.pushToken additional_fields = {"request": pushNotificationContext.superGluuRequest} debug = pushNotificationContext.debugEnabled msgBuilder = APNS.newPayload().alertBody(message).alertTitle(title).sound("default") msgBuilder.forNewsstand() msgBuilder.customFields(additional_fields) push_message = msgBuilder.build() send_notification_result = self.pushAppleService.push(push_token, push_message) if debug: dbg_msg = """Super-Gluu-Push. Send iOS native push notification. push_token:'%s', message: '%s', send_notification_result: '%s'""" print dbg_msg % (push_token, push_message, send_notification_result)
def initNativePushNotificationService(self, configurationAttributes): print "Super-Gluu. Initialize native notification services" self.pushSnsMode = False creds = self.loadPushNotificationCreds(configurationAttributes) if creds == None: return False try: android_creds = creds["android"]["gcm"] ios_creads = creds["ios"]["apns"] except: print "Super-Gluu. Initialize native notification services. Invalid credentials file format" return False self.pushAndroidService = None self.pushAppleService = None if android_creds["enabled"]: self.pushAndroidService = Sender(android_creds["api_key"]) print "Super-Gluu. Initialize native notification services. Created Android notification service" if ios_creads["enabled"]: p12_file_path = ios_creads["p12_file_path"] p12_passowrd = ios_creads["p12_password"] try: encryptionService = CdiUtil.bean(EncryptionService) p12_passowrd = encryptionService.decrypt(p12_passowrd) except: # Ignore exception. Password is not encrypted print "Super-Gluu. Initialize native notification services. Assuming that 'p12_passowrd' password in not encrypted" apnsServiceBuilder = APNS.newService().withCert( p12_file_path, p12_passowrd) if ios_creads["production"]: self.pushAppleService = apnsServiceBuilder.withProductionDestination( ).build() else: self.pushAppleService = apnsServiceBuilder.withSandboxDestination( ).build() print "Super-Gluu. Initialize native notification services. Created iOS notification service" enabled = self.pushAndroidService != None or self.pushAppleService != None return enabled
def sendApplePushNativeNotification(self, pushNotificationContext): title = self.titleTemplate message = self.messageTemplate % pushNotificationContext.appId push_token = pushNotificationContext.pushToken additional_fields = { "request": pushNotificationContext.superGluuRequest } debug = pushNotificationContext.debugEnabled msgBuilder = APNS.newPayload().alertBody(message).alertTitle( title).sound("default") msgBuilder.forNewsstand() msgBuilder.customFields(additional_fields) push_message = msgBuilder.build() send_notification_result = self.pushAppleService.push( push_token, push_message) if debug: dbg_msg = """Super-Gluu-Push. Send iOS native push notification. push_token:'%s', message: '%s', send_notification_result: '%s'""" print dbg_msg % (push_token, push_message, send_notification_result)
def initNativePushNotifications(self, creds): print "Super-Gluu-Push. Native push notifications init ... " try: android_creds = creds["android"]["gcm"] ios_creds = creds["ios"]["apns"] except: print "Super-Gluu-Push. Invalid credentials format" return None self.pushAndroidService = None self.pushAppleService = None if android_creds["enabled"]: self.pushAndroidService = Sender(android_creds["api_key"]) print "Super-Gluu-Push. Created native Android notification service" if ios_creds["enabled"]: p12_file_path = ios_creds["p12_file_path"] p12_password = ios_creds["p12_password"] try: encryptionService = CdiUtil.bean(EncryptionService) p12_password = encryptionService.decrypt(p12_password) except: # Ignore exception. Password is not encrypted print "Super-Gluu-Push. Assuming 'p12_password' is not encrypted" apnsServiceBuilder = APNS.newService().withCert( p12_file_path, p12_password) if ios_creds["production"]: self.pushAppleService = apnsServiceBuilder.withProductionDestination( ).build() else: self.pushAppleService = apnsServiceBuilder.withSandboxDestination( ).build() self.pushAppleServiceProduction = ios_creds["production"] print "Super-Gluu-Push. Created native iOS notification service" self.pushNotificationsEnabled = self.pushAndroidService != None or self.pushAppleService != None
def initNativePushNotifications(self, creds): print "Super-Gluu-Push. Native push notifications init ... " try: android_creds = creds["android"]["gcm"] ios_creds = creds["ios"]["apns"] except: print "Super-Gluu-Push. Invalid credentials format" return None self.pushAndroidService = None self.pushAppleService = None if android_creds["enabled"]: self.pushAndroidService = Sender(android_creds["api_key"]) print "Super-Gluu-Push. Created native Android notification service" if ios_creds["enabled"]: p12_file_path = ios_creds["p12_file_path"] p12_password = ios_creds["p12_password"] try: encryptionService = CdiUtil.bean(EncryptionService) p12_password = encryptionService.decrypt(p12_password) except: # Ignore exception. Password is not encrypted print "Super-Gluu-Push. Assuming 'p12_password' is not encrypted" apnsServiceBuilder = APNS.newService().withCert(p12_file_path,p12_password) if ios_creds["production"]: self.pushAppleService = apnsServiceBuilder.withProductionDestination().build() else: self.pushAppleService = apnsServiceBuilder.withSandboxDestination().build() self.pushAppleServiceProduction = ios_creds["production"] print "Super-Gluu-Push. Created native iOS notification service" self.pushNotificationsEnabled = self.pushAndroidService != None or self.pushAppleService != None
def sendPushNotification(self, client_redirect_uri, user, super_gluu_request): if not self.enabledPushNotifications: return user_name = user.getUserId() print "Super-Gluu. Send push notification. Loading user '%s' devices" % user_name send_notification = False send_notification_result = True userService = UserService.instance() deviceRegistrationService = DeviceRegistrationService.instance() user_inum = userService.getUserInum(user_name) u2f_devices_list = deviceRegistrationService.findUserDeviceRegistrations(user_inum, client_redirect_uri, "oxId", "oxDeviceData") if u2f_devices_list.size() > 0: for u2f_device in u2f_devices_list: device_data = u2f_device.getDeviceData() # Device data which Super-Gluu gets during enrollment if device_data == None: continue platform = device_data.getPlatform() push_token = device_data.getPushToken() debug = False if StringHelper.equalsIgnoreCase(platform, "ios") and StringHelper.isNotEmpty(push_token): # Sending notification to iOS user's device if self.pushAppleService == None: print "Super-Gluu. Send push notification. Apple push notification service is not enabled" else: send_notification = True title = "Super-Gluu" message = "Super-Gluu login request to: %s" % client_redirect_uri additional_fields = { "request" : super_gluu_request } msgBuilder = APNS.newPayload().alertBody(message).alertTitle(title).sound("default") msgBuilder.category('ACTIONABLE').badge(0) msgBuilder.forNewsstand() msgBuilder.customFields(additional_fields) push_message = msgBuilder.build() send_notification_result = self.pushAppleService.push(push_token, push_message) if debug: print "Super-Gluu. Send iOS push notification. token: '%s', message: '%s', send_notification_result: '%s'" % (push_token, push_message, send_notification_result) if StringHelper.equalsIgnoreCase(platform, "android") and StringHelper.isNotEmpty(push_token): # Sending notification to Android user's device if self.pushAndroidService == None: print "Super-Gluu. Send push notification. Android push notification service is not enabled" else: send_notification = True title = "Super-Gluu" msgBuilder = Message.Builder().addData("message", super_gluu_request).addData("title", title).collapseKey("single").contentAvailable(True) push_message = msgBuilder.build() send_notification_result = self.pushAndroidService.send(push_message, push_token, 3) if debug: print "Super-Gluu. Send Android push notification. token: '%s', message: '%s', send_notification_result: '%s'" % (push_token, push_message, send_notification_result) print "Super-Gluu. Send push notification. send_notification: '%s', send_notification_result: '%s'" % (send_notification, send_notification_result)
def sendPushNotificationImpl(self, client_redirect_uri, user, super_gluu_request): if not self.enabledPushNotifications: return user_name = user.getUserId() print "Super-Gluu. Send push notification. Loading user '%s' devices" % user_name send_notification = False send_notification_result = True userService = CdiUtil.bean(UserService) deviceRegistrationService = CdiUtil.bean(DeviceRegistrationService) user_inum = userService.getUserInum(user_name) send_android = 0 send_ios = 0 u2f_devices_list = deviceRegistrationService.findUserDeviceRegistrations(user_inum, client_redirect_uri, "oxId", "oxDeviceData", "oxDeviceNotificationConf") if u2f_devices_list.size() > 0: for u2f_device in u2f_devices_list: device_data = u2f_device.getDeviceData() # Device data which Super-Gluu gets during enrollment if device_data == None: continue platform = device_data.getPlatform() push_token = device_data.getPushToken() debug = False if StringHelper.equalsIgnoreCase(platform, "ios") and StringHelper.isNotEmpty(push_token): # Sending notification to iOS user's device if self.pushAppleService == None: print "Super-Gluu. Send push notification. Apple native push notification service is not enabled" else: send_notification = True title = "Super-Gluu" message = "Super-Gluu login request to: %s" % client_redirect_uri if self.pushSnsMode or self.pushGluuMode: pushSnsService = CdiUtil.bean(PushSnsService) targetEndpointArn = self.getTargetEndpointArn(deviceRegistrationService, pushSnsService, PushPlatform.APNS, user, u2f_device) if targetEndpointArn == None: return send_notification = True sns_push_request_dictionary = { "aps": { "badge": 0, "alert" : {"body": message, "title" : title}, "category": "ACTIONABLE", "content-available": "1", "sound": 'default' }, "request" : super_gluu_request } push_message = json.dumps(sns_push_request_dictionary, separators=(',',':')) if self.pushSnsMode: apple_push_platform = PushPlatform.APNS if not self.pushAppleServiceProduction: apple_push_platform = PushPlatform.APNS_SANDBOX send_notification_result = pushSnsService.sendPushMessage(self.pushAppleService, apple_push_platform, targetEndpointArn, push_message, None) if debug: print "Super-Gluu. Send iOS SNS push notification. token: '%s', message: '%s', send_notification_result: '%s', apple_push_platform: '%s'" % (push_token, push_message, send_notification_result, apple_push_platform) elif self.pushGluuMode: send_notification_result = self.pushAppleService.sendNotification(self.pushAppleServiceAuth, targetEndpointArn, push_message) if debug: print "Super-Gluu. Send iOS Gluu push notification. token: '%s', message: '%s', send_notification_result: '%s'" % (push_token, push_message, send_notification_result) else: additional_fields = { "request" : super_gluu_request } msgBuilder = APNS.newPayload().alertBody(message).alertTitle(title).sound("default") msgBuilder.category('ACTIONABLE').badge(0) msgBuilder.forNewsstand() msgBuilder.customFields(additional_fields) push_message = msgBuilder.build() send_notification_result = self.pushAppleService.push(push_token, push_message) if debug: print "Super-Gluu. Send iOS Native push notification. token: '%s', message: '%s', send_notification_result: '%s'" % (push_token, push_message, send_notification_result) send_ios = send_ios + 1 if StringHelper.equalsIgnoreCase(platform, "android") and StringHelper.isNotEmpty(push_token): # Sending notification to Android user's device if self.pushAndroidService == None: print "Super-Gluu. Send native push notification. Android native push notification service is not enabled" else: send_notification = True title = "Super-Gluu" if self.pushSnsMode or self.pushGluuMode: pushSnsService = CdiUtil.bean(PushSnsService) targetEndpointArn = self.getTargetEndpointArn(deviceRegistrationService, pushSnsService, PushPlatform.GCM, user, u2f_device) if targetEndpointArn == None: return send_notification = True sns_push_request_dictionary = { "collapse_key": "single", "content_available": True, "time_to_live": 60, "data": { "message" : super_gluu_request, "title" : title } } push_message = json.dumps(sns_push_request_dictionary, separators=(',',':')) if self.pushSnsMode: send_notification_result = pushSnsService.sendPushMessage(self.pushAndroidService, PushPlatform.GCM, targetEndpointArn, push_message, None) if debug: print "Super-Gluu. Send Android SNS push notification. token: '%s', message: '%s', send_notification_result: '%s'" % (push_token, push_message, send_notification_result) elif self.pushGluuMode: send_notification_result = self.pushAndroidService.sendNotification(self.pushAndroidServiceAuth, targetEndpointArn, push_message) if debug: print "Super-Gluu. Send Android Gluu push notification. token: '%s', message: '%s', send_notification_result: '%s'" % (push_token, push_message, send_notification_result) else: msgBuilder = Message.Builder().addData("message", super_gluu_request).addData("title", title).collapseKey("single").contentAvailable(True) push_message = msgBuilder.build() send_notification_result = self.pushAndroidService.send(push_message, push_token, 3) if debug: print "Super-Gluu. Send Android Native push notification. token: '%s', message: '%s', send_notification_result: '%s'" % (push_token, push_message, send_notification_result) send_android = send_android + 1 print "Super-Gluu. Send push notification. send_android: '%s', send_ios: '%s'" % (send_android, send_ios)