From 77a2d35bfca97dab64c00a72bede8919c1d599b1 Mon Sep 17 00:00:00 2001 From: Michael Neeley Date: Wed, 13 Nov 2019 11:30:21 -0500 Subject: [PATCH 1/3] Shortens Sharing Links --- packages/apollos-church-api/config.yml | 3 +++ packages/apollos-church-api/package.json | 21 ++++++++-------- .../src/data/content-items/data-source.js | 25 +++++++++++++++++-- yarn.lock | 5 ++++ 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/packages/apollos-church-api/config.yml b/packages/apollos-church-api/config.yml index 69921478..4d79c1b4 100644 --- a/packages/apollos-church-api/config.yml +++ b/packages/apollos-church-api/config.yml @@ -19,6 +19,7 @@ ROCK: API_TOKEN: ${ROCK_TOKEN} IMAGE_URL: https://s3.amazonaws.com SHARE_URL: https://newspring.cc + SHORTLINK_SHARE_URL: ns.link # This should match the timezone of the Rock server TIMEZONE: 'America/New_York' USE_PLUGIN: true @@ -143,6 +144,8 @@ ROCK_MAPPINGS: WEB_CAMPUS_ID: 20 + SHORTLINK_SHARING_SITE_ID: 18 + SERVING_GROUP_TYPE_ID: 23 COMMUNITY_GROUP_TYPE_ID: 25 FAMILY_GROUP_TYPE_ID: 10 diff --git a/packages/apollos-church-api/package.json b/packages/apollos-church-api/package.json index d22d667c..be97a8b1 100644 --- a/packages/apollos-church-api/package.json +++ b/packages/apollos-church-api/package.json @@ -31,11 +31,14 @@ }, "dependencies": { "@apollosproject/config": "^1.2.2", + "@apollosproject/data-connector-algolia-search": "^1.2.2", "@apollosproject/data-connector-analytics": "^1.2.2", "@apollosproject/data-connector-bible": "^1.2.2", "@apollosproject/data-connector-church-online": "^1.2.2", + "@apollosproject/data-connector-cloudinary": "^1.2.2", "@apollosproject/data-connector-onesignal": "^1.2.2", "@apollosproject/data-connector-passes": "^1.2.2", + "@apollosproject/data-connector-redis-cache": "^1.2.2", "@apollosproject/data-connector-rock": "^1.2.2", "@apollosproject/data-connector-twilio": "^1.2.2", "@apollosproject/data-schema": "^1.2.2", @@ -44,26 +47,24 @@ "@bugsnag/js": "^6.2.0", "@bugsnag/plugin-express": "^6.2.0", "apollo-server": "^2.0.5", + "apollo-server-express": "2.4.8", + "btoa": "^1.2.1", "color": "3.0.0", "dotenv": "6.0.0", + "express": "^4.17.0", "graphql": "0.13.2", "prettier": "1.12.1", - "randomcolor": "0.5.3", - "apollo-server-express": "2.4.8", - "express": "^4.17.0", - "@apollosproject/data-connector-algolia-search": "^1.2.2", - "@apollosproject/data-connector-cloudinary": "^1.2.2", - "@apollosproject/data-connector-redis-cache": "^1.2.2" + "randomcolor": "0.5.3" }, "devDependencies": { "@apollosproject/apollo-server-env-mock": "^1.2.2", "@apollosproject/babel-preset-apollos": "^1.2.2", "@babel/cli": "^7.4.5", "@babel/core": "^7.4.5", - "codecov": "3.0.2", - "nodemon": "1.18.7", "@entria/graphql-findbreakingchanges": "^1.0.1", + "codecov": "3.0.2", "get-graphql-schema": "^2.1.2", - "graphql-schema-linter": "^0.2.0" + "graphql-schema-linter": "^0.2.0", + "nodemon": "1.18.7" } -} \ No newline at end of file +} diff --git a/packages/apollos-church-api/src/data/content-items/data-source.js b/packages/apollos-church-api/src/data/content-items/data-source.js index 30563159..d55589b9 100644 --- a/packages/apollos-church-api/src/data/content-items/data-source.js +++ b/packages/apollos-church-api/src/data/content-items/data-source.js @@ -3,9 +3,10 @@ import { get } from 'lodash'; import ApollosConfig from '@apollosproject/config'; import { parseKeyValueAttribute } from '@apollosproject/rock-apollo-data-source'; import sanitizeHtmlNode from 'sanitize-html'; +import btoa from 'btoa'; import { createAssetUrl } from '../utils'; -const { ROCK, ROCK_CONSTANTS } = ApollosConfig; +const { ROCK, ROCK_CONSTANTS, ROCK_MAPPINGS } = ApollosConfig; export default class ContentItem extends oldContentItem.dataSource { getContentItemScriptures = async ({ value: matrixItemGuid }) => { @@ -171,9 +172,29 @@ export default class ContentItem extends oldContentItem.dataSource { .filter(`ContentChannelItemId eq ${parent.id}`) .first(); } - return `${ROCK.SHARE_URL + contentChannel.channelUrl}/${ + const path = `${ROCK.SHARE_URL + contentChannel.channelUrl}/${ parent ? `${parentSlug.slug}/` : '' }${slug.slug}`; + + // check that token has already been made + const link = await this.request('PageShortLinks') + .filter(`Url eq '${path}'`) + .first(); + if (link) return `${ROCK.SHORTLINK_SHARE_URL}/${link.token}`; + + // generate token + const token = btoa(path) + .replace(/[0-9A-Z+=/]*/g, '') + .slice(-7, -1); + const linkID = await this.post('PageShortLinks', { + Url: path, + SiteId: ROCK_MAPPINGS.SHORTLINK_SHARING_SITE_ID, + Token: token, + }); + const newLink = await this.request('PageShortLinks') + .filter(`Id eq ${linkID}`) + .first(); + return `${ROCK.SHORTLINK_SHARE_URL}/${newLink.token}` || path; }; getParent = async (childId, channelId) => { diff --git a/yarn.lock b/yarn.lock index 6453fc36..c8bd8b4d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6317,6 +6317,11 @@ btoa-lite@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" +btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" From 99d1dff39de6fd72050a1ce1bc2a587b6282d9a7 Mon Sep 17 00:00:00 2001 From: Michael Neeley Date: Wed, 13 Nov 2019 11:33:07 -0500 Subject: [PATCH 2/3] ternary --- .../apollos-church-api/src/data/content-items/data-source.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apollos-church-api/src/data/content-items/data-source.js b/packages/apollos-church-api/src/data/content-items/data-source.js index d55589b9..0cfd10f0 100644 --- a/packages/apollos-church-api/src/data/content-items/data-source.js +++ b/packages/apollos-church-api/src/data/content-items/data-source.js @@ -194,7 +194,7 @@ export default class ContentItem extends oldContentItem.dataSource { const newLink = await this.request('PageShortLinks') .filter(`Id eq ${linkID}`) .first(); - return `${ROCK.SHORTLINK_SHARE_URL}/${newLink.token}` || path; + return newLink ? `${ROCK.SHORTLINK_SHARE_URL}/${newLink.token}` : path; }; getParent = async (childId, channelId) => { From 13df7720fc6aca7db494539ca1bd15ea88e560a7 Mon Sep 17 00:00:00 2001 From: Michael Neeley Date: Thu, 21 Nov 2019 08:38:51 -0500 Subject: [PATCH 3/3] adds s domain --- packages/apollos-church-api/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apollos-church-api/config.yml b/packages/apollos-church-api/config.yml index 4d79c1b4..672ea947 100644 --- a/packages/apollos-church-api/config.yml +++ b/packages/apollos-church-api/config.yml @@ -19,7 +19,7 @@ ROCK: API_TOKEN: ${ROCK_TOKEN} IMAGE_URL: https://s3.amazonaws.com SHARE_URL: https://newspring.cc - SHORTLINK_SHARE_URL: ns.link + SHORTLINK_SHARE_URL: ns.link/s # This should match the timezone of the Rock server TIMEZONE: 'America/New_York' USE_PLUGIN: true