-
Notifications
You must be signed in to change notification settings - Fork 6
/
library.js
106 lines (88 loc) · 2.67 KB
/
library.js
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
'use strict';
const validator = require('validator');
const winston = require.main.require('winston');
const meta = require.main.require('./src/meta');
const groups = require.main.require('./src/groups');
const Adsense = module.exports;
Adsense.widget = {};
Adsense.admin = {};
let app;
/**
* Called on `static:app.load`
*/
Adsense.onLoad = async function (params) {
const helpers = require.main.require('./src/routes/helpers');
app = params.app;
helpers.setupPageRoute(params.router, '/ads.txt', async (req, res, next) => {
const { adstxt } = await meta.settings.get('google-adsense');
if (!adstxt) {
return next();
}
res.send(validator.escape(String(adstxt)));
});
helpers.setupAdminPageRoute(params.router, '/admin/plugins/google-adsense', [], async (req, res) => {
let groupNames = await groups.getGroups('groups:createtime', 0, -1);
groupNames = groupNames.filter(groupName => groupName && !groups.isPrivilegeGroup(groupName))
.map(groupName => ({
name: validator.escape(String(groupName)),
value: validator.escape(String(groupName)),
}));
res.render('admin/plugins/google-adsense', {
groups: groupNames,
title: 'Google Adsense',
});
});
};
Adsense.onConfigGet = async function (config) {
config.googleAdsense = await meta.settings.get('google-adsense');
return config;
};
Adsense.admin.menu = function (custom_header) {
custom_header.plugins.push({
route: '/plugins/google-adsense',
icon: 'fa-usd',
name: 'Google Adsense',
});
return custom_header;
};
/**
* Called on `action:plugin.activate`
*/
Adsense.admin.activate = async function (data) {
if (data.id === 'nodebb-plugin-google-adsense') {
const defaults = { client_id: '' };
await meta.settings.setOnEmpty('google-adsense', defaults);
}
};
/**
* Called on `filter:widgets.getWidgets`
*/
Adsense.widget.defineWidgets = async function (widgets) {
widgets.push({
widget: 'adsense-widget',
name: 'Google AdSense',
description: 'Easily place ads on your forum',
content: await app.renderAsync('admin/plugins/widgets/adsense-widget', {}),
});
return widgets;
};
/**
* Called on `filter:widget.render:adsense-widget`
*/
Adsense.widget.renderAdsense = async function (widget) {
try {
const settings = await meta.settings.get('google-adsense');
const adFreeGroups = JSON.parse(settings.adFreeGroups || '[]');
const isInAdFreeGroup = await groups.isMemberOfAny(widget.uid, adFreeGroups);
if (isInAdFreeGroup) {
return null;
}
widget.html = await app.renderAsync('widgets/adsense-widget', {
clientId: settings.client_id,
blockId: widget && widget.data && widget.data.blockId,
});
} catch (err) {
winston.error('[adsense] error', err);
}
return widget;
};