summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/index.js8
-rw-r--r--examples/lib/okpush/apn.js19
-rw-r--r--examples/lib/okpush/db.js62
-rw-r--r--examples/lib/okpush/index.js62
-rw-r--r--examples/lib/okpush/package.json4
-rw-r--r--examples/lib/okpush/templates/index.liquid11
l---------examples/lib/okpush/templates/partials1
-rw-r--r--examples/lib/okpush/test_certs/CertificateSigningRequest.certSigningRequest16
-rw-r--r--examples/lib/okpush/test_certs/Certificates.p12bin0 -> 3209 bytes
-rw-r--r--examples/lib/okpush/test_certs/aps_development.cerbin0 -> 1421 bytes
-rw-r--r--examples/lib/okpush/test_certs/overlayer_dev_cert.pem32
-rw-r--r--examples/lib/okpush/test_certs/overlayer_dev_key.pem68
12 files changed, 250 insertions, 33 deletions
diff --git a/examples/index.js b/examples/index.js
index 357ff60..10bcbd7 100644
--- a/examples/index.js
+++ b/examples/index.js
@@ -102,6 +102,14 @@ var app = okcms.createApp({
interval: 43200,
batchFeedback: true
}
+ },
+ notifications: {
+ note.expiry = Math.floor(Date.now() / 1000) + 3600; // Expires 1 hour from now.
+ note.badge = 3;
+ note.sound = "ping.aiff";
+ note.alert = "\uD83D\uDCE7 \u2709 You have a new message";
+ note.payload = {'messageFrom': 'John Appleseed'};
+ note.topic = "<your-app-bundle-id>";
}
},
},
diff --git a/examples/lib/okpush/apn.js b/examples/lib/okpush/apn.js
index 11b8711..050a466 100644
--- a/examples/lib/okpush/apn.js
+++ b/examples/lib/okpush/apn.js
@@ -1,13 +1,14 @@
-var config = require('./Config');
-var apn = require('apn');
+var config = require('./Config')
+var apn = require('apn')
var db = require('./db')
+var apnConnection, apnFeedback
function init (config) {
- var apnConnection = new apn.Connection(config.apn.connection)
+ apnConnection = new apn.Connection(config.apn.connection)
apnConnection.on('transmissionError', onTransmissionError)
- var apnFeedback = new apn.Feedback(config.apn.feedback)
+ apnFeedback = new apn.Feedback(config.apn.feedback)
apnFeedback.on('feedback', onFeedback)
return apnConnection
@@ -20,7 +21,7 @@ function onTransmissionError (errorCode, notification, recipient) {
var token = recipient.token.toString('hex').toUpperCase()
console.log('Invalid token: removing device ' + token)
- pushAssociations.removeDevice(token)
+ db.remove(token)
}
}
@@ -28,17 +29,17 @@ function onFeedback (deviceInfos) {
console.log('Feedback service, number of devices to remove: ' + deviceInfos.length)
if (deviceInfos.length > 0) {
- pushAssociations.removeDevices(deviceInfos.map(function (deviceInfo) {
+ db.removeDevices(deviceInfos.map(function (deviceInfo) {
return deviceInfo.device.token.toString('hex')
})
}
}
-var push = function (tokens, payload) {
- apnSender().pushNotification(payload, tokens)
+function push (tokens, payload) {
+ apnConnection.pushNotification(payload, tokens)
}
-var buildPayload = function (options) {
+function buildPayload (options) {
var notif = new apn.Notification()
notif.expiry = options.expiry || 0
diff --git a/examples/lib/okpush/db.js b/examples/lib/okpush/db.js
index 5a66b01..67d1ba8 100644
--- a/examples/lib/okpush/db.js
+++ b/examples/lib/okpush/db.js
@@ -1,29 +1,63 @@
-// db
+var mongoose = require('mongoose')
+var _ = require('lodash')
+var db, PushToken
function init (config) {
- var db = mongoose.connect(config.mongodbUrl);
- mongoose.connection.on('error', errorHandler);
+ db = mongoose.connect(config.mongodbUrl)
+ mongoose.connection.on('error', errorHandler)
- var pushAssociationSchema = new db.Schema({
- user: {
- type: 'String',
- required: true
- },
+ var pushTokenSchema = new db.Schema({
type: {
type: 'String',
required: true,
enum: ['ios', 'android'],
- lowercase: true
+ lowercase: true,
},
token: {
type: 'String',
- required: true
+ required: true,
}
- });
+ })
- PushAssociation = db.model('PushAssociation', pushAssociationSchema);
+ PushToken = db.model('PushToken', pushTokenSchema)
}
function errorHandler (error) {
- console.error('ERROR: ' + error);
-}; \ No newline at end of file
+ console.error('ERROR: ' + error)
+}
+function add (deviceType, token) {
+ var pushItem = new PushToken({ type: deviceType, token: token })
+ pushItem.save()
+}
+function getAll (cb) {
+ var wcb = wrap(cb)
+ PushToken.find(wcb)
+}
+function removeDevice () {
+ PushToken.remove({token: token}, function (err) {
+ if (err) console.log(err)
+ })
+}
+function removeDevices (tokens) {
+ PushAssociation.remove({token: {$in: tokens}}, function (err) {
+ if (err) console.log(err)
+ })
+}
+function wrap (cb) {
+ return function (err, items) {
+ if (err) return cb(err, null)
+
+ var items = _.map(items, function (item) {
+ return _.pick(item, ['type', 'token'])
+ })
+
+ return callback(null, items)
+ }
+}
+module.exports = {
+ init: init,
+ add: add,
+ getAll: getAll,
+ removeDevice: removeDevice,
+ removeDevices: removeDevices,
+} \ No newline at end of file
diff --git a/examples/lib/okpush/index.js b/examples/lib/okpush/index.js
index 8b10918..e8b6549 100644
--- a/examples/lib/okpush/index.js
+++ b/examples/lib/okpush/index.js
@@ -1,27 +1,71 @@
/**
*/
-var apn = require('apn');
+var OKTemplate = require('../../../app/node_modules/oktemplate')
+var passport = require('passport')
+var apn = require('./apn')
+var db = require('./db')
+
+passport.use(new DigestStrategy({qop: 'auth'},
+ function authenticate(username, done) {
+ if (!process.env.OK_USER || !process.env.OK_PASS) {
+ return done(new Error('No user or pass configured on server'))
+ } else {
+ return done(null, process.env.OK_USER, process.env.OK_PASS)
+ }
+}))
function OKPush (options) {
if (!(this instanceof OKPush)) return new OKPush(options)
options = options || {}
if (!options.express)
- throw new Error('Express not provided to OKPush');
+ throw new Error('Express not provided to OKPush')
if (!options.config)
- throw new Error('Configuration not provided to OKPush');
-
+ throw new Error('Configuration not provided to OKPush')
+ if (!options.config.notifications)
+ throw new Error('Notifications not defined in OKPush')
+
var express = options.express
var router = express.Router()
var config = options.config
- var db = options.db
+ var meta = options.meta
+ var error = options.errorHandler
+ // var okcms_db = options.db
+
+ var templateProvider = this._templateProvider = new OKTemplate({
+ root: path.join(__dirname, './templates'),
+ debug: meta.debug
+ })
+
+ var templates = {}
+ templates['index'] = templateProvider.getTemplate('index')
+
+ apn.init()
+ db.init()
+
+ router.use('/admin/', passport.initialize())
+ router.all('/admin/(:path*)?', passport.authenticate('digest', {
+ session: false
+ }))
+
+ // pass in admin middleware!
+ router.get('/admin/', function (req, res) {
+ var data = {
+ meta: meta,
+ notifications: config.notifications,
+ }
+ templates['index'].render(data).then(function(rendered) {
+ res.send(rendered);
+ }).fail(error(req, res, 500))
+ })
- router.get('*', function (req, res) {
- res.send(config.stuff)
+ router.post('/send', function (req, res) {
+ // add a key
})
- router.post('*', function (req, res) {
- throw new Error('OKPush POST requests not implemented')
+ // should work without middleware
+ router.post('/add', function (req, res) {
+ // add a key
})
this._router = router
diff --git a/examples/lib/okpush/package.json b/examples/lib/okpush/package.json
index 7af03ae..4c2f4a1 100644
--- a/examples/lib/okpush/package.json
+++ b/examples/lib/okpush/package.json
@@ -9,6 +9,8 @@
"author": "okfocus <frontdesk@okfoc.us>",
"license": "LNT",
"dependencies": {
- "apn": "^2.1.1"
+ "apn": "^2.1.1",
+ "lodash": "^4.16.3",
+ "mongoose": "^4.6.2"
}
}
diff --git a/examples/lib/okpush/templates/index.liquid b/examples/lib/okpush/templates/index.liquid
new file mode 100644
index 0000000..388a95b
--- /dev/null
+++ b/examples/lib/okpush/templates/index.liquid
@@ -0,0 +1,11 @@
+{% include 'partials/head' %}
+
+{% include 'partials/flash' %}
+
+<nav class="resource-nav">
+</nav>
+
+<section class="main resource resource-new">
+</section>
+
+{% include 'partials/tail' %}
diff --git a/examples/lib/okpush/templates/partials b/examples/lib/okpush/templates/partials
new file mode 120000
index 0000000..490ec14
--- /dev/null
+++ b/examples/lib/okpush/templates/partials
@@ -0,0 +1 @@
+../../../../themes/okadmin/templates/partials/ \ No newline at end of file
diff --git a/examples/lib/okpush/test_certs/CertificateSigningRequest.certSigningRequest b/examples/lib/okpush/test_certs/CertificateSigningRequest.certSigningRequest
new file mode 100644
index 0000000..3a4074a
--- /dev/null
+++ b/examples/lib/okpush/test_certs/CertificateSigningRequest.certSigningRequest
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIICkjCCAXoCAQAwTTEdMBsGCSqGSIb3DQEJARYOanVsZXNAb2tmb2MudXMxHzAd
+BgNVBAMMFkp1bGlhbiBMYXBsYWNlIERFViBLRVkxCzAJBgNVBAYTAlVTMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArrpXz8B0q/tJ2+N6gjK2zLNPIIlA
+lzrE46TIkY10xo9jW3vBRgZL9V5xKtmCWf3KfR2I7KioyqqnZvz6++TV/M3rZptJ
+XN8yMmG4mjTqgC1V2SubYyUZqpqkfyLK1ePimsg09UUNxwNcIyBJun+f8wXqz7HK
+Kieiq+d7oTs+WJbWdkIftxe7hjL2n93PI1LLCF15Cx8s7XP7R7QsTGMvHUzYYHiL
+4bc+r54jpZ28onVAwdYx+p3WkKzdFGjkrIl++IXmyJr0E7jilfrKwMWi4tvCKgXV
+KH6VmWLIKOtfKVMdIK0WQ9ij3kRHfEwgN/djC3M2UWFEGLx1d7FuL5c+nQIDAQAB
+oAAwDQYJKoZIhvcNAQELBQADggEBAIGOwvuW7HaOb1h+nkpIDTHNRN6Lw3MTg8nU
+68skeSFatC8lC4e//Gsl1z8iyR7amhoMrZ29f4Tgs5w8NFgcVmzdp5CL126WA3qV
+Qu+xZxhgwUnLRxtpDUVtTdJGaYNmowpm4mqs5YFg6WCIhWg+kuEJJ8MSOkYHtyAx
+HIpbfjeSW69VGelr+vGZ6Jf07UCquwJCJR4WmsIyruJhvf2CQMPsT3bXKrhu/sWg
+WyjjCjXVLeDOO/tiRMnPteCcDZPsXKyi9PPkSF4u591YoUL0UxjlzlignBT4FSyq
+s8kdmrEHWIW1BAscmNVny2YTuGjbFos/GBSMDeJvoXdvPS2kRiQ=
+-----END CERTIFICATE REQUEST-----
diff --git a/examples/lib/okpush/test_certs/Certificates.p12 b/examples/lib/okpush/test_certs/Certificates.p12
new file mode 100644
index 0000000..6e61158
--- /dev/null
+++ b/examples/lib/okpush/test_certs/Certificates.p12
Binary files differ
diff --git a/examples/lib/okpush/test_certs/aps_development.cer b/examples/lib/okpush/test_certs/aps_development.cer
new file mode 100644
index 0000000..8d55dd4
--- /dev/null
+++ b/examples/lib/okpush/test_certs/aps_development.cer
Binary files differ
diff --git a/examples/lib/okpush/test_certs/overlayer_dev_cert.pem b/examples/lib/okpush/test_certs/overlayer_dev_cert.pem
new file mode 100644
index 0000000..3758dd2
--- /dev/null
+++ b/examples/lib/okpush/test_certs/overlayer_dev_cert.pem
@@ -0,0 +1,32 @@
+-----BEGIN CERTIFICATE-----
+MIIFiTCCBHGgAwIBAgIIaNpEjSUbbWwwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
+ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
+aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
+HhcNMTYxMDA0MjAxMTM3WhcNMTcxMDA0MjAxMTM3WjCBiDEiMCAGCgmSJomT8ixk
+AQEMEnVzLm9rZm9jLm92ZXJsYXllcjFAMD4GA1UEAww3QXBwbGUgRGV2ZWxvcG1l
+bnQgSU9TIFB1c2ggU2VydmljZXM6IHVzLm9rZm9jLm92ZXJsYXllcjETMBEGA1UE
+CwwKNUVIOVc1WDVTSjELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQCuulfPwHSr+0nb43qCMrbMs08giUCXOsTjpMiRjXTGj2Nbe8FG
+Bkv1XnEq2YJZ/cp9HYjsqKjKqqdm/Pr75NX8zetmm0lc3zIyYbiaNOqALVXZK5tj
+JRmqmqR/IsrV4+KayDT1RQ3HA1wjIEm6f5/zBerPscoqJ6Kr53uhOz5YltZ2Qh+3
+F7uGMvaf3c8jUssIXXkLHyztc/tHtCxMYy8dTNhgeIvhtz6vniOlnbyidUDB1jH6
+ndaQrN0UaOSsiX74hebImvQTuOKV+srAxaLi28IqBdUofpWZYsgo618pUx0grRZD
+2KPeREd8TCA392MLczZRYUQYvHV3sW4vlz6dAgMBAAGjggHlMIIB4TAdBgNVHQ4E
+FgQUckSbISzH7PTE7R9gsIb/sxKzHrgwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBSI
+JxcJqbYYYIvs67r2R1nFUlSjtzCCAQ8GA1UdIASCAQYwggECMIH/BgkqhkiG92Nk
+BQEwgfEwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZp
+Y2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVu
+IGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNl
+LCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ug
+c3RhdGVtZW50cy4wKQYIKwYBBQUHAgEWHWh0dHA6Ly93d3cuYXBwbGUuY29tL2Fw
+cGxlY2EvME0GA1UdHwRGMEQwQqBAoD6GPGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUu
+Y29tL2NlcnRpZmljYXRpb25hdXRob3JpdHkvd3dkcmNhLmNybDALBgNVHQ8EBAMC
+B4AwEwYDVR0lBAwwCgYIKwYBBQUHAwIwEAYKKoZIhvdjZAYDAQQCBQAwDQYJKoZI
+hvcNAQEFBQADggEBAEuQKbpqxQPnazN4A0NVB7YRr2M2Hk5DtV4M/QT8OFDY1IsA
+s4U8NmI9AMgoszIdLG3n4x2Y4mm6yTYDEMQpaJRbir9Fx6WcZQ4GB72iZ1M/1fkC
+79Yq17yzxM9Awf2igx1EkZhzy6Oq+7cUX9Jbz5IQrPyfXe5hpaOmY4jnWgSlaiwJ
+6bBhFHwhJY9ekAFOyRnZS7hQD4mLOBZLti/lH4Z2zadd21DbM/uhUvLJgYpIRplP
+hoFxV5bev5vv9A0dbYw6ERa3+aG8HHmP9N4u1/JxHIX2VlYzzLj1l7Tlps6QG6/r
+4CsJBIfpGjxwznrYJBN5ox1KlFxNLwD3UNpLhOQ=
+-----END CERTIFICATE-----
diff --git a/examples/lib/okpush/test_certs/overlayer_dev_key.pem b/examples/lib/okpush/test_certs/overlayer_dev_key.pem
new file mode 100644
index 0000000..30cb696
--- /dev/null
+++ b/examples/lib/okpush/test_certs/overlayer_dev_key.pem
@@ -0,0 +1,68 @@
+Bag Attributes
+ friendlyName: Apple Development IOS Push Services: us.okfoc.overlayer
+ localKeyID: 72 44 9B 21 2C C7 EC F4 C4 ED 1F 60 B0 86 FF B3 12 B3 1E B8
+subject=/UID=us.okfoc.overlayer/CN=Apple Development IOS Push Services: us.okfoc.overlayer/OU=5EH9W5X5SJ/C=US
+issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
+-----BEGIN CERTIFICATE-----
+MIIFiTCCBHGgAwIBAgIIaNpEjSUbbWwwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
+ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
+aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
+HhcNMTYxMDA0MjAxMTM3WhcNMTcxMDA0MjAxMTM3WjCBiDEiMCAGCgmSJomT8ixk
+AQEMEnVzLm9rZm9jLm92ZXJsYXllcjFAMD4GA1UEAww3QXBwbGUgRGV2ZWxvcG1l
+bnQgSU9TIFB1c2ggU2VydmljZXM6IHVzLm9rZm9jLm92ZXJsYXllcjETMBEGA1UE
+CwwKNUVIOVc1WDVTSjELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQCuulfPwHSr+0nb43qCMrbMs08giUCXOsTjpMiRjXTGj2Nbe8FG
+Bkv1XnEq2YJZ/cp9HYjsqKjKqqdm/Pr75NX8zetmm0lc3zIyYbiaNOqALVXZK5tj
+JRmqmqR/IsrV4+KayDT1RQ3HA1wjIEm6f5/zBerPscoqJ6Kr53uhOz5YltZ2Qh+3
+F7uGMvaf3c8jUssIXXkLHyztc/tHtCxMYy8dTNhgeIvhtz6vniOlnbyidUDB1jH6
+ndaQrN0UaOSsiX74hebImvQTuOKV+srAxaLi28IqBdUofpWZYsgo618pUx0grRZD
+2KPeREd8TCA392MLczZRYUQYvHV3sW4vlz6dAgMBAAGjggHlMIIB4TAdBgNVHQ4E
+FgQUckSbISzH7PTE7R9gsIb/sxKzHrgwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBSI
+JxcJqbYYYIvs67r2R1nFUlSjtzCCAQ8GA1UdIASCAQYwggECMIH/BgkqhkiG92Nk
+BQEwgfEwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZp
+Y2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVu
+IGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNl
+LCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ug
+c3RhdGVtZW50cy4wKQYIKwYBBQUHAgEWHWh0dHA6Ly93d3cuYXBwbGUuY29tL2Fw
+cGxlY2EvME0GA1UdHwRGMEQwQqBAoD6GPGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUu
+Y29tL2NlcnRpZmljYXRpb25hdXRob3JpdHkvd3dkcmNhLmNybDALBgNVHQ8EBAMC
+B4AwEwYDVR0lBAwwCgYIKwYBBQUHAwIwEAYKKoZIhvdjZAYDAQQCBQAwDQYJKoZI
+hvcNAQEFBQADggEBAEuQKbpqxQPnazN4A0NVB7YRr2M2Hk5DtV4M/QT8OFDY1IsA
+s4U8NmI9AMgoszIdLG3n4x2Y4mm6yTYDEMQpaJRbir9Fx6WcZQ4GB72iZ1M/1fkC
+79Yq17yzxM9Awf2igx1EkZhzy6Oq+7cUX9Jbz5IQrPyfXe5hpaOmY4jnWgSlaiwJ
+6bBhFHwhJY9ekAFOyRnZS7hQD4mLOBZLti/lH4Z2zadd21DbM/uhUvLJgYpIRplP
+hoFxV5bev5vv9A0dbYw6ERa3+aG8HHmP9N4u1/JxHIX2VlYzzLj1l7Tlps6QG6/r
+4CsJBIfpGjxwznrYJBN5ox1KlFxNLwD3UNpLhOQ=
+-----END CERTIFICATE-----
+Bag Attributes
+ friendlyName: Julian Laplace DEV KEY
+ localKeyID: 72 44 9B 21 2C C7 EC F4 C4 ED 1F 60 B0 86 FF B3 12 B3 1E B8
+Key Attributes: <No Attributes>
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEArrpXz8B0q/tJ2+N6gjK2zLNPIIlAlzrE46TIkY10xo9jW3vB
+RgZL9V5xKtmCWf3KfR2I7KioyqqnZvz6++TV/M3rZptJXN8yMmG4mjTqgC1V2Sub
+YyUZqpqkfyLK1ePimsg09UUNxwNcIyBJun+f8wXqz7HKKieiq+d7oTs+WJbWdkIf
+txe7hjL2n93PI1LLCF15Cx8s7XP7R7QsTGMvHUzYYHiL4bc+r54jpZ28onVAwdYx
++p3WkKzdFGjkrIl++IXmyJr0E7jilfrKwMWi4tvCKgXVKH6VmWLIKOtfKVMdIK0W
+Q9ij3kRHfEwgN/djC3M2UWFEGLx1d7FuL5c+nQIDAQABAoIBAQCdKIiBGccXRa/a
+MxJm9zyKhCGAz1MkczzS0M2Cdax6SFCC4Z4m4NUDfw3lD7z6Opcd0CnvS4h+ud5W
+eOc7GEoM2B6KrNPgz/Szckf7k+r0nVJhQqLCG4WpeOzKWb39grq4o6lWjuTkgzYl
+dg46zD5O9ZyNcYm4PuxHGK+Phtz+CjkEx5Y6WqoBvgA10A+pHBSMAZ2uRznGHJmQ
+xF9HHdLLKwtZemRGEdZaC510fpBDbgapLzZqy495/2I3zlOFSW9thWhJ/PO45AH1
+bqtRRq0z0CU94QynulrcvZlyFVF5msDyzBI6B7oZAumC5y9s/v6/jE2rIr1uNx2W
+e3Zbh+21AoGBAOAUhkD932XhDKtatDpBDQ8va9ZiiQCuO8VFP1wck2U18ovy6DQn
+A3JJUoC/d4K7brCQ5CgzACI0tgen99u78qN3F3caapwJMbQ3LAdZA6U5tZq/7poA
+FrvEs6vAToe+HhLkWxvctO0sEGtZEDUptRRa5cGoMAV2FyLvtSHgPk+jAoGBAMee
+GgcunO+XBI8HVgC9GTLxJWUuXpwYslI9uDXTVFsJ4jqEAk0R4qA8wGa6VpXS7yea
+3Vd8qG9C8yVIuSoajyH4FYQ6rzfbUDoYHsKkJUabJWTK08VPb2RVae6vDQmXqyw3
+X6QH+no33inyD5bEqaSg7lTcQ03kX3shVj+kTBy/AoGBAL0slqsHqTI5bJi9WqpT
+gNLxFflH9qG8dnl0nKkG9ujbQokj6SUeSqqRfDV1b0/PLQOjTvshE1vNZF/STk4T
+viSCxiynAJn6qRub+G+7lnhG4CplHuqkaIzc41J8Z8/xkTIh10kOazBPowz9g9Fe
+BKHKm22CsAfsSlwUQrb2uaRBAoGAI660UmJXtVBWhUa3bexfi8ale5+9U8PqZF8a
+Ba0gICH1KaadTq+Kxj/12KcogSGylG7PcCsdZL4f/qMwTkFvIpBZMEjZN2/huHDF
+Vt/GtgdXuNu03UlkzRejlwH9n6BX/dBsLUMr2BsSgIb/mGDRPldyIwM4mLzhAH6m
+DzxMSrsCgYB9LP/AsmUY67lajzYO18Xu9YTNzIKwovD/RhRHRz0kOI7QQRSXNtGZ
+RwzV9OCeRXGLrC2n6w9KnGx8d6pZKElzDkN7+Ql9y2ALmzaInmugTyoNxBPeU3GB
+DxN5IIkt2G1rexC/SaQ9WOokiQSKJIZGRHR/WHKpXC/mBHxq7CENkQ==
+-----END RSA PRIVATE KEY-----