diff options
author | Chocobozzz <me@florianbigard.com> | 2018-05-10 12:26:47 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2018-05-11 08:48:20 +0200 |
commit | 8be1afa12b700b93ed92365cab05c0ef81d643aa (patch) | |
tree | 563369bded16d3612a631bb1a9b068b2bb76abe8 /server | |
parent | c7b0dacb28e3b5aa9f43a7a0eb683e2af9826cb9 (diff) | |
download | PeerTube-8be1afa12b700b93ed92365cab05c0ef81d643aa.tar.gz PeerTube-8be1afa12b700b93ed92365cab05c0ef81d643aa.tar.zst PeerTube-8be1afa12b700b93ed92365cab05c0ef81d643aa.zip |
Add ability to embed a video in Twitter
The instance should be whitelisted first
Diffstat (limited to 'server')
-rw-r--r-- | server/controllers/api/config.ts | 6 | ||||
-rw-r--r-- | server/controllers/client.ts | 4 | ||||
-rw-r--r-- | server/initializers/checker.ts | 3 | ||||
-rw-r--r-- | server/initializers/constants.ts | 6 | ||||
-rw-r--r-- | server/tests/api/check-params/config.ts | 6 | ||||
-rw-r--r-- | server/tests/api/server/config.ts | 14 | ||||
-rw-r--r-- | server/tests/client.ts | 30 |
7 files changed, 65 insertions, 4 deletions
diff --git a/server/controllers/api/config.ts b/server/controllers/api/config.ts index e47b71f44..12074a80e 100644 --- a/server/controllers/api/config.ts +++ b/server/controllers/api/config.ts | |||
@@ -161,6 +161,12 @@ function customConfig (): CustomConfig { | |||
161 | javascript: CONFIG.INSTANCE.CUSTOMIZATIONS.JAVASCRIPT | 161 | javascript: CONFIG.INSTANCE.CUSTOMIZATIONS.JAVASCRIPT |
162 | } | 162 | } |
163 | }, | 163 | }, |
164 | services: { | ||
165 | twitter: { | ||
166 | username: CONFIG.SERVICES.TWITTER.USERNAME, | ||
167 | whitelisted: CONFIG.SERVICES.TWITTER.WHITELISTED | ||
168 | } | ||
169 | }, | ||
164 | cache: { | 170 | cache: { |
165 | previews: { | 171 | previews: { |
166 | size: CONFIG.CACHE.PREVIEWS.SIZE | 172 | size: CONFIG.CACHE.PREVIEWS.SIZE |
diff --git a/server/controllers/client.ts b/server/controllers/client.ts index b5dc7b7ed..20f7e5c9c 100644 --- a/server/controllers/client.ts +++ b/server/controllers/client.ts | |||
@@ -77,8 +77,8 @@ function addOpenGraphAndOEmbedTags (htmlStringPage: string, video: VideoModel) { | |||
77 | 'description': videoDescriptionEscaped, | 77 | 'description': videoDescriptionEscaped, |
78 | 'image': previewUrl, | 78 | 'image': previewUrl, |
79 | 79 | ||
80 | 'twitter:card': 'summary_large_image', | 80 | 'twitter:card': CONFIG.SERVICES.TWITTER.WHITELISTED ? 'player' : 'summary_large_image', |
81 | 'twitter:site': '@Chocobozzz', | 81 | 'twitter:site': CONFIG.SERVICES.TWITTER.USERNAME, |
82 | 'twitter:title': videoNameEscaped, | 82 | 'twitter:title': videoNameEscaped, |
83 | 'twitter:description': videoDescriptionEscaped, | 83 | 'twitter:description': videoDescriptionEscaped, |
84 | 'twitter:image': previewUrl, | 84 | 'twitter:image': previewUrl, |
diff --git a/server/initializers/checker.ts b/server/initializers/checker.ts index 739f623c6..9bf53e940 100644 --- a/server/initializers/checker.ts +++ b/server/initializers/checker.ts | |||
@@ -29,7 +29,8 @@ function checkMissedConfig () { | |||
29 | 'user.video_quota', | 29 | 'user.video_quota', |
30 | 'cache.previews.size', 'admin.email', 'signup.enabled', 'signup.limit', 'transcoding.enabled', 'transcoding.threads', | 30 | 'cache.previews.size', 'admin.email', 'signup.enabled', 'signup.limit', 'transcoding.enabled', 'transcoding.threads', |
31 | 'instance.name', 'instance.short_description', 'instance.description', 'instance.terms', 'instance.default_client_route', | 31 | 'instance.name', 'instance.short_description', 'instance.description', 'instance.terms', 'instance.default_client_route', |
32 | 'instance.default_nsfw_policy' | 32 | 'instance.default_nsfw_policy', |
33 | 'services.twitter.username', 'services.twitter.whitelisted' | ||
33 | ] | 34 | ] |
34 | const miss: string[] = [] | 35 | const miss: string[] = [] |
35 | 36 | ||
diff --git a/server/initializers/constants.ts b/server/initializers/constants.ts index c52c27c78..c4e8522c2 100644 --- a/server/initializers/constants.ts +++ b/server/initializers/constants.ts | |||
@@ -174,6 +174,12 @@ const CONFIG = { | |||
174 | get JAVASCRIPT () { return config.get<string>('instance.customizations.javascript') }, | 174 | get JAVASCRIPT () { return config.get<string>('instance.customizations.javascript') }, |
175 | get CSS () { return config.get<string>('instance.customizations.css') } | 175 | get CSS () { return config.get<string>('instance.customizations.css') } |
176 | } | 176 | } |
177 | }, | ||
178 | SERVICES: { | ||
179 | TWITTER: { | ||
180 | get USERNAME () { return config.get<string>('services.twitter.username') }, | ||
181 | get WHITELISTED () { return config.get<boolean>('services.twitter.whitelisted') } | ||
182 | } | ||
177 | } | 183 | } |
178 | } | 184 | } |
179 | 185 | ||
diff --git a/server/tests/api/check-params/config.ts b/server/tests/api/check-params/config.ts index 58b780f38..6aa31e38d 100644 --- a/server/tests/api/check-params/config.ts +++ b/server/tests/api/check-params/config.ts | |||
@@ -26,6 +26,12 @@ describe('Test config API validators', function () { | |||
26 | css: 'body { background-color: red; }' | 26 | css: 'body { background-color: red; }' |
27 | } | 27 | } |
28 | }, | 28 | }, |
29 | services: { | ||
30 | twitter: { | ||
31 | username: '@MySuperUsername', | ||
32 | whitelisted: true | ||
33 | } | ||
34 | }, | ||
29 | cache: { | 35 | cache: { |
30 | previews: { | 36 | previews: { |
31 | size: 2 | 37 | size: 2 |
diff --git a/server/tests/api/server/config.ts b/server/tests/api/server/config.ts index 3f1b1532c..f24961b85 100644 --- a/server/tests/api/server/config.ts +++ b/server/tests/api/server/config.ts | |||
@@ -62,6 +62,8 @@ describe('Test config', function () { | |||
62 | expect(data.instance.defaultNSFWPolicy).to.equal('display') | 62 | expect(data.instance.defaultNSFWPolicy).to.equal('display') |
63 | expect(data.instance.customizations.css).to.be.empty | 63 | expect(data.instance.customizations.css).to.be.empty |
64 | expect(data.instance.customizations.javascript).to.be.empty | 64 | expect(data.instance.customizations.javascript).to.be.empty |
65 | expect(data.services.twitter.username).to.equal('@Chocobozzz') | ||
66 | expect(data.services.twitter.whitelisted).to.be.false | ||
65 | expect(data.cache.previews.size).to.equal(1) | 67 | expect(data.cache.previews.size).to.equal(1) |
66 | expect(data.signup.enabled).to.be.true | 68 | expect(data.signup.enabled).to.be.true |
67 | expect(data.signup.limit).to.equal(4) | 69 | expect(data.signup.limit).to.equal(4) |
@@ -90,6 +92,12 @@ describe('Test config', function () { | |||
90 | css: 'body { background-color: red; }' | 92 | css: 'body { background-color: red; }' |
91 | } | 93 | } |
92 | }, | 94 | }, |
95 | services: { | ||
96 | twitter: { | ||
97 | username: '@Kuja', | ||
98 | whitelisted: true | ||
99 | } | ||
100 | }, | ||
93 | cache: { | 101 | cache: { |
94 | previews: { | 102 | previews: { |
95 | size: 2 | 103 | size: 2 |
@@ -130,6 +138,8 @@ describe('Test config', function () { | |||
130 | expect(data.instance.defaultNSFWPolicy).to.equal('blur') | 138 | expect(data.instance.defaultNSFWPolicy).to.equal('blur') |
131 | expect(data.instance.customizations.javascript).to.equal('alert("coucou")') | 139 | expect(data.instance.customizations.javascript).to.equal('alert("coucou")') |
132 | expect(data.instance.customizations.css).to.equal('body { background-color: red; }') | 140 | expect(data.instance.customizations.css).to.equal('body { background-color: red; }') |
141 | expect(data.services.twitter.username).to.equal('@Kuja') | ||
142 | expect(data.services.twitter.whitelisted).to.be.true | ||
133 | expect(data.cache.previews.size).to.equal(2) | 143 | expect(data.cache.previews.size).to.equal(2) |
134 | expect(data.signup.enabled).to.be.false | 144 | expect(data.signup.enabled).to.be.false |
135 | expect(data.signup.limit).to.equal(5) | 145 | expect(data.signup.limit).to.equal(5) |
@@ -162,6 +172,8 @@ describe('Test config', function () { | |||
162 | expect(data.instance.defaultNSFWPolicy).to.equal('blur') | 172 | expect(data.instance.defaultNSFWPolicy).to.equal('blur') |
163 | expect(data.instance.customizations.javascript).to.equal('alert("coucou")') | 173 | expect(data.instance.customizations.javascript).to.equal('alert("coucou")') |
164 | expect(data.instance.customizations.css).to.equal('body { background-color: red; }') | 174 | expect(data.instance.customizations.css).to.equal('body { background-color: red; }') |
175 | expect(data.services.twitter.username).to.equal('@Kuja') | ||
176 | expect(data.services.twitter.whitelisted).to.be.true | ||
165 | expect(data.cache.previews.size).to.equal(2) | 177 | expect(data.cache.previews.size).to.equal(2) |
166 | expect(data.signup.enabled).to.be.false | 178 | expect(data.signup.enabled).to.be.false |
167 | expect(data.signup.limit).to.equal(5) | 179 | expect(data.signup.limit).to.equal(5) |
@@ -205,6 +217,8 @@ describe('Test config', function () { | |||
205 | expect(data.instance.defaultNSFWPolicy).to.equal('display') | 217 | expect(data.instance.defaultNSFWPolicy).to.equal('display') |
206 | expect(data.instance.customizations.css).to.be.empty | 218 | expect(data.instance.customizations.css).to.be.empty |
207 | expect(data.instance.customizations.javascript).to.be.empty | 219 | expect(data.instance.customizations.javascript).to.be.empty |
220 | expect(data.services.twitter.username).to.equal('@Chocobozzz') | ||
221 | expect(data.services.twitter.whitelisted).to.be.false | ||
208 | expect(data.cache.previews.size).to.equal(1) | 222 | expect(data.cache.previews.size).to.equal(1) |
209 | expect(data.signup.enabled).to.be.true | 223 | expect(data.signup.enabled).to.be.true |
210 | expect(data.signup.limit).to.equal(4) | 224 | expect(data.signup.limit).to.equal(4) |
diff --git a/server/tests/client.ts b/server/tests/client.ts index 2be1cf5dd..2adb39c5e 100644 --- a/server/tests/client.ts +++ b/server/tests/client.ts | |||
@@ -11,7 +11,7 @@ import { | |||
11 | runServer, | 11 | runServer, |
12 | serverLogin, | 12 | serverLogin, |
13 | uploadVideo, | 13 | uploadVideo, |
14 | getVideosList | 14 | getVideosList, updateCustomConfig, getCustomConfig |
15 | } from './utils' | 15 | } from './utils' |
16 | 16 | ||
17 | describe('Test a client controllers', function () { | 17 | describe('Test a client controllers', function () { |
@@ -73,6 +73,34 @@ describe('Test a client controllers', function () { | |||
73 | expect(res.text).to.contain(expectedLink) | 73 | expect(res.text).to.contain(expectedLink) |
74 | }) | 74 | }) |
75 | 75 | ||
76 | it('Should have valid twitter card', async function () { | ||
77 | const res = await request(server.url) | ||
78 | .get('/videos/watch/' + server.video.uuid) | ||
79 | .set('Accept', 'text/html') | ||
80 | .expect(200) | ||
81 | |||
82 | expect(res.text).to.contain('<meta property="twitter:card" content="summary_large_image" />') | ||
83 | expect(res.text).to.contain('<meta property="twitter:site" content="@Chocobozzz" />') | ||
84 | }) | ||
85 | |||
86 | it('Should have valid twitter card if Twitter is whitelisted', async function () { | ||
87 | const res1 = await getCustomConfig(server.url, server.accessToken) | ||
88 | const config = res1.body | ||
89 | config.services.twitter = { | ||
90 | username: '@Kuja', | ||
91 | whitelisted: true | ||
92 | } | ||
93 | await updateCustomConfig(server.url, server.accessToken, config) | ||
94 | |||
95 | const res = await request(server.url) | ||
96 | .get('/videos/watch/' + server.video.uuid) | ||
97 | .set('Accept', 'text/html') | ||
98 | .expect(200) | ||
99 | |||
100 | expect(res.text).to.contain('<meta property="twitter:card" content="player" />') | ||
101 | expect(res.text).to.contain('<meta property="twitter:site" content="@Kuja" />') | ||
102 | }) | ||
103 | |||
76 | after(async function () { | 104 | after(async function () { |
77 | process.kill(-server.app.pid) | 105 | process.kill(-server.app.pid) |
78 | 106 | ||