summaryrefslogtreecommitdiffstats
path: root/docker/iframely.config.local.js
blob: 8e8bc21fb3f23c55045aeaa67229670e545d35e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
(function() {
    var config = {

        // Specify a path for custom plugins. Custom plugins will override core plugins.
        // CUSTOM_PLUGINS_PATH: __dirname + '/yourcustom-plugin-folder',

        DEBUG: false,
        RICH_LOG_ENABLED: false,

        // For embeds that require render, baseAppUrl will be used as the host.
        baseAppUrl: "http://yourdomain.com",
        relativeStaticUrl: "/r",

        // Or just skip built-in renders altogether
        SKIP_IFRAMELY_RENDERS: true,

        // For legacy reasons the response format of Iframely open-source is
        // different by default as it does not group the links array by rel.
        // In order to get the same grouped response as in Cloud API,
        // add `&group=true` to your request to change response per request
        // or set `GROUP_LINKS` in your config to `true` for a global change.
        GROUP_LINKS: true,

        // Number of maximum redirects to follow before aborting the page
        // request with `redirect loop` error.
        MAX_REDIRECTS: 4,

        SKIP_OEMBED_RE_LIST: [
            // /^https?:\/\/yourdomain\.com\//,
        ],

        /*
        // Used to pass parameters to the generate functions when creating HTML elements
        // disableSizeWrapper: Don't wrap element (iframe, video, etc) in a positioned div
        GENERATE_LINK_PARAMS: {
            disableSizeWrapper: true
        },
        */

        port: 80, //can be overridden by PORT env var
        host: '0.0.0.0',    // Dockers beware. See https://github.com/itteco/iframely/issues/132#issuecomment-242991246
                            //can be overridden by HOST env var

        // Optional SSL cert, if you serve under HTTPS.
        /*
        ssl: {
            key: require('fs').readFileSync(__dirname + '/key.pem'),
            cert: require('fs').readFileSync(__dirname + '/cert.pem'),
            port: 443
        },
        */

        /*
        Supported cache engines:
        - no-cache - no caching will be used.
        - node-cache - good for debug, node memory will be used (https://github.com/tcs-de/nodecache).
        - redis - https://github.com/mranney/node_redis.
        - memcached - https://github.com/3rd-Eden/node-memcached
        */
        CACHE_ENGINE: 'node-cache',
        CACHE_TTL: 0, // In seconds.
        // 0 = 'never expire' for memcached & node-cache to let cache engine decide itself when to evict the record
        // 0 = 'no cache' for redis. Use high enough (e.g. 365*24*60*60*1000) ttl for similar 'never expire' approach instead

        /*
        // Redis cache options.
        REDIS_OPTIONS: {
            host: '127.0.0.1',
            port: 6379
        },
        */

        /*
        // Memcached options. See https://github.com/3rd-Eden/node-memcached#server-locations
        MEMCACHED_OPTIONS: {
            locations: "127.0.0.1:11211"
        }
        */

        /*
        // Access-Control-Allow-Origin list.
        allowedOrigins: [
            "*",
            "http://another_domain.com"
        ],
        */

        /*
        // Uncomment to enable plugin testing framework.
        tests: {
            mongodb: 'mongodb://localhost:27017/iframely-tests',
            single_test_timeout: 10 * 1000,
            plugin_test_period: 2 * 60 * 60 * 1000,
            relaunch_script_period: 5 * 60 * 1000
        },
        */

        // If there's no response from remote server, the timeout will occur after
        RESPONSE_TIMEOUT: 5 * 1000, //ms

        /* From v1.4.0, Iframely supports HTTP/2 by default. Disable it, if you'd rather not.
           Alternatively, you can also disable per origin. See `proxy` option below.
        */
        // DISABLE_HTTP2: true,

        // Customize API calls to oembed endpoints.
        ADD_OEMBED_PARAMS: [{
            // Endpoint url regexp array.
            re: [/^http:\/\/api\.instagram\.com\/oembed/],
            // Custom get params object.
            params: {
                hidecaption: true
            }
        }, {
            re: [/^https:\/\/www\.facebook\.com\/plugins\/page\/oembed\.json/i],
            params: {
                show_posts: 0,
                show_facepile: 0,
                maxwidth: 600
            }
        }, {
            // match i=user or i=moment or i=timeline to configure these types invidually
            // see params spec at https://dev.twitter.com/web/embedded-timelines/oembed
            re: [/^https?:\/\/publish\.twitter\.com\/oembed\?i=user/i],
            params: {
                limit: 1,
                maxwidth: 600
            }
        /*
        }, {
            // Facebook https://developers.facebook.com/docs/plugins/oembed-endpoints
            re: [/^https:\/\/www\.facebook\.com\/plugins\/\w+\/oembed\.json/i],
            params: {
                // Skip script tag and fb-root div.
                omitscript: true
            }
        */
         }],

        /*
        // Configure use of HTTP proxies as needed.
        // You don't have to specify all options per regex - just what you need to override
        PROXY: [{
            re: [/^https?:\/\/www\.domain\.com/],
            proxy_server: 'http://1.2.3.4:8080',
            user_agent: 'CHANGE YOUR AGENT',
            headers: {
                // HTTP headers
                // Overrides previous params if overlapped.
            },
            request_options: {
                // Refer to: https://github.com/request/request
                // Overrides previous params if overlapped.
            },
            disable_http2: true
        }],
        */

        // Customize API calls to 3rd parties. At the very least - configure required keys.
        providerOptions: {
            locale: "en_US",    // ISO 639-1 two-letter language code, e.g. en_CA or fr_CH.
                                // Will be added as highest priotity in accept-language header with each request.
                                // Plus is used in FB, YouTube and perhaps other plugins
            "twitter": {
                "max-width": 550,
                "min-width": 250,
                hide_media: false,
                hide_thread: false,
                omit_script: false,
                center: false,
                // dnt: true,
                cache_ttl: 100 * 365 * 24 * 3600 // 100 Years.
            },
            readability: {
                enabled: false
                // allowPTagDescription: true  // to enable description fallback to first paragraph
            },
            images: {
                loadSize: false, // if true, will try an load first bytes of all images to get/confirm the sizes
                checkFavicon: false // if true, will verify all favicons
            },
            tumblr: {
                consumer_key: "INSERT YOUR VALUE"
                // media_only: true     // disables status embeds for images and videos - will return plain media
            },
            google: {
                // https://developers.google.com/maps/documentation/embed/guide#api_key
                maps_key: "INSERT YOUR VALUE"
            },

            /*
            // Optional Camo Proxy to wrap all images: https://github.com/atmos/camo
            camoProxy: {
                camo_proxy_key: "INSERT YOUR VALUE",
                camo_proxy_host: "INSERT YOUR VALUE"
                // ssl_only: true // will only proxy non-ssl images
            },
            */

            // List of query parameters to add to YouTube and Vimeo frames
            // Start it with leading "?". Or omit alltogether for default values
            // API key is optional, youtube will work without it too.
            // It is probably the same API key you use for Google Maps.
            youtube: {
                // api_key: "INSERT YOUR VALUE",
                get_params: "?rel=0&showinfo=1"     // https://developers.google.com/youtube/player_parameters
            },
            vimeo: {
                get_params: "?byline=0&badge=0"     // https://developer.vimeo.com/player/embedding
            },

            /*
            soundcloud: {
                old_player: true // enables classic player
            },
            giphy: {
                media_only: true // disables branded player for gifs and returns just the image
            }
            */
            /*
            bandcamp: {
                get_params: '/size=large/bgcol=333333/linkcol=ffffff/artwork=small/transparent=true/',
                media: {
                    album: {
                        height: 472,
                        'max-width': 700
                    },
                    track: {
                        height: 120,
                        'max-width': 700
                    }
                }
            }
            */
        },

        // WHITELIST_WILDCARD, if present, will be added to whitelist as record for top level domain: "*"
        // with it, you can define what parsers do when they run accross unknown publisher.
        // If absent or empty, all generic media parsers will be disabled except for known domains
        // More about format: https://iframely.com/docs/qa-format

        /*
        WHITELIST_WILDCARD: {
              "twitter": {
                "player": "allow",
                "photo": "deny"
              },
              "oembed": {
                "video": "allow",
                "photo": "allow",
                "rich": "deny",
                "link": "deny"
              },
              "og": {
                "video": ["allow", "ssl", "responsive"]
              },
              "iframely": {
                "survey": "allow",
                "reader": "allow",
                "player": "allow",
                "image": "allow"
              },
              "html-meta": {
                "video": ["allow", "responsive"],
                "promo": "allow"
              }
        }
        */

        // Black-list any of the inappropriate domains. Iframely will return 417
        // At minimum, keep your localhosts blacklisted to avoid SSRF
        BLACKLIST_DOMAINS_RE: [
            /^https?:\/\/127\.0\.0\.1/i,
            /^https?:\/\/localhost/i,

            // And this is AWS metadata service
            // https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
            /^https?:\/\/169\.254\.169\.254/
        ]
    };

    module.exports = config;
})();