Browse Source

removed the concept of a "domain" from DTP Sites engine

master
Rob Colbert 2 years ago
parent
commit
f890259d7f
  1. 1
      app/controllers/admin.js
  2. 91
      app/controllers/admin/domain.js
  3. 4
      app/controllers/admin/job-queue.js
  4. 2
      app/controllers/manifest.js
  5. 8
      app/models/article.js
  6. 13
      app/models/category.js
  7. 3
      app/models/chat-message.js
  8. 21
      app/models/domain.js
  9. 2
      app/models/otp-account.js
  10. 72
      app/services/domain.js
  11. 9
      app/services/otp-auth.js
  12. 3
      app/services/user.js
  13. 26
      app/views/admin/channel-application/index.pug
  14. 79
      app/views/admin/channel-application/view.pug
  15. 28
      app/views/admin/channel/index.pug
  16. 13
      app/views/admin/domain/form.pug
  17. 18
      app/views/admin/domain/index.pug
  18. 4
      app/views/components/navbar.pug
  19. 32
      app/views/components/pwa-support.pug
  20. 4
      app/workers/host-services.js
  21. BIN
      client/img/icon/altmedia.tv.png
  22. BIN
      client/img/icon/altmedia.tv/home.png
  23. BIN
      client/img/icon/altmedia.tv/icon-114x114.png
  24. BIN
      client/img/icon/altmedia.tv/icon-120x120.png
  25. BIN
      client/img/icon/altmedia.tv/icon-144x144.png
  26. BIN
      client/img/icon/altmedia.tv/icon-150x150.png
  27. BIN
      client/img/icon/altmedia.tv/icon-152x152.png
  28. BIN
      client/img/icon/altmedia.tv/icon-16x16.png
  29. BIN
      client/img/icon/altmedia.tv/icon-180x180.png
  30. BIN
      client/img/icon/altmedia.tv/icon-192x192.png
  31. BIN
      client/img/icon/altmedia.tv/icon-256x256.png
  32. BIN
      client/img/icon/altmedia.tv/icon-310x310.png
  33. BIN
      client/img/icon/altmedia.tv/icon-32x32.png
  34. BIN
      client/img/icon/altmedia.tv/icon-36x36.png
  35. BIN
      client/img/icon/altmedia.tv/icon-384x384.png
  36. BIN
      client/img/icon/altmedia.tv/icon-48x48.png
  37. BIN
      client/img/icon/altmedia.tv/icon-512x512.png
  38. BIN
      client/img/icon/altmedia.tv/icon-57x57.png
  39. BIN
      client/img/icon/altmedia.tv/icon-60x60.png
  40. BIN
      client/img/icon/altmedia.tv/icon-70x70.png
  41. BIN
      client/img/icon/altmedia.tv/icon-72x72.png
  42. BIN
      client/img/icon/altmedia.tv/icon-76x76.png
  43. BIN
      client/img/icon/altmedia.tv/icon-96x96.png
  44. BIN
      client/img/icon/freetopray.tv.png
  45. BIN
      client/img/icon/freetopray.tv/home.png
  46. BIN
      client/img/icon/freetopray.tv/icon-114x114.png
  47. BIN
      client/img/icon/freetopray.tv/icon-120x120.png
  48. BIN
      client/img/icon/freetopray.tv/icon-144x144.png
  49. BIN
      client/img/icon/freetopray.tv/icon-150x150.png
  50. BIN
      client/img/icon/freetopray.tv/icon-152x152.png
  51. BIN
      client/img/icon/freetopray.tv/icon-16x16.png
  52. BIN
      client/img/icon/freetopray.tv/icon-180x180.png
  53. BIN
      client/img/icon/freetopray.tv/icon-192x192.png
  54. BIN
      client/img/icon/freetopray.tv/icon-256x256.png
  55. BIN
      client/img/icon/freetopray.tv/icon-310x310.png
  56. BIN
      client/img/icon/freetopray.tv/icon-32x32.png
  57. BIN
      client/img/icon/freetopray.tv/icon-36x36.png
  58. BIN
      client/img/icon/freetopray.tv/icon-384x384.png
  59. BIN
      client/img/icon/freetopray.tv/icon-48x48.png
  60. BIN
      client/img/icon/freetopray.tv/icon-512x512.png
  61. BIN
      client/img/icon/freetopray.tv/icon-57x57.png
  62. BIN
      client/img/icon/freetopray.tv/icon-60x60.png
  63. BIN
      client/img/icon/freetopray.tv/icon-70x70.png
  64. BIN
      client/img/icon/freetopray.tv/icon-72x72.png
  65. BIN
      client/img/icon/freetopray.tv/icon-76x76.png
  66. BIN
      client/img/icon/freetopray.tv/icon-96x96.png
  67. 0
      client/img/icon/icon-114x114.png
  68. 0
      client/img/icon/icon-120x120.png
  69. 0
      client/img/icon/icon-144x144.png
  70. 0
      client/img/icon/icon-150x150.png
  71. 0
      client/img/icon/icon-152x152.png
  72. 0
      client/img/icon/icon-16x16.png
  73. 0
      client/img/icon/icon-180x180.png
  74. 0
      client/img/icon/icon-192x192.png
  75. 0
      client/img/icon/icon-256x256.png
  76. 0
      client/img/icon/icon-310x310.png
  77. 0
      client/img/icon/icon-32x32.png
  78. 0
      client/img/icon/icon-36x36.png
  79. 0
      client/img/icon/icon-384x384.png
  80. 0
      client/img/icon/icon-48x48.png
  81. 0
      client/img/icon/icon-512x512.png
  82. 0
      client/img/icon/icon-57x57.png
  83. 0
      client/img/icon/icon-60x60.png
  84. 0
      client/img/icon/icon-70x70.png
  85. 0
      client/img/icon/icon-72x72.png
  86. 0
      client/img/icon/icon-76x76.png
  87. 0
      client/img/icon/icon-96x96.png
  88. BIN
      client/img/icon/shing.tv.png
  89. BIN
      client/img/icon/shing.tv/home.png
  90. BIN
      client/img/icon/shing.tv/icon-114x114.png
  91. BIN
      client/img/icon/shing.tv/icon-120x120.png
  92. BIN
      client/img/icon/shing.tv/icon-144x144.png
  93. BIN
      client/img/icon/shing.tv/icon-150x150.png
  94. BIN
      client/img/icon/shing.tv/icon-152x152.png
  95. BIN
      client/img/icon/shing.tv/icon-16x16.png
  96. BIN
      client/img/icon/shing.tv/icon-180x180.png
  97. BIN
      client/img/icon/shing.tv/icon-192x192.png
  98. BIN
      client/img/icon/shing.tv/icon-256x256.png
  99. BIN
      client/img/icon/shing.tv/icon-310x310.png
  100. BIN
      client/img/icon/shing.tv/icon-32x32.png

1
app/controllers/admin.js

@ -44,7 +44,6 @@ class AdminController extends SiteController {
}),
);
router.use('/domain',await this.loadChild(path.join(__dirname, 'admin', 'domain')));
router.use('/host',await this.loadChild(path.join(__dirname, 'admin', 'host')));
router.use('/job-queue',await this.loadChild(path.join(__dirname, 'admin', 'job-queue')));
router.use('/user', await this.loadChild(path.join(__dirname, 'admin', 'user')));

91
app/controllers/admin/domain.js

@ -1,91 +0,0 @@
// admin/domain.js
// Copyright (C) 2021 Digital Telepresence, LLC
// License: Apache-2.0
'use strict';
const express = require('express');
const { /*SiteError,*/ SiteController } = require('../../../lib/site-lib');
class DomainController extends SiteController {
constructor (dtp) {
super(dtp, 'admin:domain');
}
async start ( ) {
const router = express.Router();
router.use(async (req, res, next) => {
res.locals.currentView = 'admin';
res.locals.adminView = 'domain';
return next();
});
router.param('domainId', this.populateDomainId.bind(this));
router.post('/:domainId', this.postUpdateDomain.bind(this));
router.post('/', this.postCreateDomain.bind(this));
router.get('/create', this.getCreateForm.bind(this));
router.get('/:domainId', this.getDomainView.bind(this));
router.get('/', this.getHomeView.bind(this));
return router;
}
async populateDomainId (req, res, next, domainId) {
const { domain: domainService } = this.dtp.services;
try {
res.locals.domain = await domainService.getById(domainId);
return next();
} catch (error) {
return next(error);
}
}
async postUpdateDomain (req, res, next) {
const { domain: domainService } = this.dtp.services;
try {
await domainService.update(res.locals.domain, req.body);
res.redirect('/admin/domain');
} catch (error) {
return next(error);
}
}
async postCreateDomain (req, res, next) {
const { domain: domainService } = this.dtp.services;
try {
res.locals.domain = await domainService.create(req.body);
res.redirect(`/admin/domain/${res.locals.domain._id}`);
} catch (error) {
return next(error);
}
}
async getDomainView (req, res) {
res.render('admin/domain/form');
}
async getCreateForm (req, res) {
res.render('admin/domain/form');
}
async getHomeView (req, res, next) {
const { domain: domainService } = this.dtp.services;
try {
res.locals.pagination = this.getPaginationParameters(req, 10);
res.locals.domains = await domainService.getDomains(res.locals.pagination);
res.render('admin/domain/index');
} catch (error) {
return next(error);
}
}
}
module.exports = async (dtp) => {
let controller = new DomainController(dtp);
return controller;
};

4
app/controllers/admin/job-queue.js

@ -1,10 +1,10 @@
// admin/domain.js
// admin/job-queue.js
// Copyright (C) 2021 Digital Telepresence, LLC
// License: Apache-2.0
'use strict';
const DTP_COMPONENT_NAME = 'admin:domain';
const DTP_COMPONENT_NAME = 'admin:job-queue';
const express = require('express');
const { /*SiteError,*/ SiteController } = require('../../../lib/site-lib');

2
app/controllers/manifest.js

@ -52,7 +52,7 @@ class ManifestController extends SiteController {
[512, 384, 256, 192, 144, 96, 72, 48, 32, 16].forEach((size) => {
manifest.icons.push({
src: `/img/icon/${this.dtp.config.site.domainKey}/icon-${size}x${size}.png`,
src: `/img/icon/icon-${size}x${size}.png`,
sizes: `${size}x${size}`,
type: 'image/png'
});

8
app/models/article.js

@ -9,7 +9,6 @@ const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ArticleSchema = new Schema({
domain: { type: Schema.ObjectId, required: true, index: 1, ref: 'Domain' },
created: { type: Date, default: Date.now, required: true, index: -1 },
author: { type: Schema.ObjectId, required: true, index: 1, ref: 'User' },
image: { type: Schema.ObjectId, required: true, ref: 'Image' },
@ -21,11 +20,4 @@ const ArticleSchema = new Schema({
},
});
ArticleSchema.index({
domain: 1,
channel: 1,
}, {
name: 'article_domain_channel_idx',
});
module.exports = mongoose.model('Article', ArticleSchema);

13
app/models/category.js

@ -9,7 +9,6 @@ const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const CategorySchema = new Schema({
domain: { type: Schema.ObjectId, required: true, index: 1, ref: 'Domain' },
name: { type: String },
slug: { type: String, lowercase: true, required: true, index: 1 },
description: { type: String },
@ -18,17 +17,9 @@ const CategorySchema = new Schema({
icon: { type: Schema.ObjectId },
},
stats: {
liveChannelCount: { type: Number, default: 0, required: true },
currentViewerCount: { type: Number, default: 0, required: true },
articleCount: { type: Number, default: 0, required: true },
articleViewCount: { type: Number, default: 0, required: true },
},
});
CategorySchema.index({
domain: 1,
slug: 1,
}, {
unique: true,
name: 'domain_category_unique',
});
module.exports = mongoose.model('Category', CategorySchema);

3
app/models/chat-message.js

@ -10,9 +10,6 @@ const Schema = mongoose.Schema;
const ChatMessageSchema = new Schema({
created: { type: Date, default: Date.now, required: true, index: -1, expires: '10d' },
domain: { type: Schema.ObjectId, required: true, index: 1, ref: 'Domain' },
channel: { type: Schema.ObjectId, required: true, index: 1, ref: 'Channel' },
episode: { type: Schema.ObjectId, index: 1, ref: 'Episode' },
author: { type: Schema.ObjectId, required: true, index: 1, ref: 'User' },
content: { type: String },
stickers: { type: [String] },

21
app/models/domain.js

@ -1,21 +0,0 @@
// domain.js
// Copyright (C) 2021 Digital Telepresence, LLC
// License: Apache-2.0
'use strict';
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const DomainSchema = new Schema({
created: { type: Date, default: Date.now, required: true, index: -1 },
name: { type: String, required: true, lowercase: true, index: 1 },
stats: {
channelCount: { type: Number, default: 0, required: true },
streamCount: { type: Number, default: 0, required: true },
viewerCount: { type: Number, default: 0, required: true },
},
});
module.exports = mongoose.model('Domain', DomainSchema);

2
app/models/otp-account.js

@ -14,7 +14,6 @@ var OtpBackupTokenSchema = new Schema({
const OtpAccountSchema = new Schema({
created: { type: Date, default: Date.now, required: true, index: -1 },
domain: { type: Schema.ObjectId, required: true, index: true, ref: 'Domain' },
user: { type: Schema.ObjectId, required: true, index: true, ref: 'User' },
service: { type: String, required: true },
secret: { type: String, required: true, select: false },
@ -27,7 +26,6 @@ const OtpAccountSchema = new Schema({
});
OtpAccountSchema.index({
domain: 1,
user: 1,
service: 1,
}, {

72
app/services/domain.js

@ -1,72 +0,0 @@
// domain.js
// Copyright (C) 2021 Digital Telepresence, LLC
// License: Apache-2.0
'use strict';
const striptags = require('striptags');
const mongoose = require('mongoose');
const Domain = mongoose.model('Domain');
const { SiteService, SiteError } = require('../../lib/site-lib');
class DomainService extends SiteService {
constructor (dtp) {
super(dtp, module.exports);
}
async create (domainDefinition) {
const NOW = new Date();
const domain = new Domain();
domain.created = NOW;
domain.name = striptags(domainDefinition.name.trim().toLowerCase());
await domain.save();
return domain.toObject();
}
async update (domain, domainDefinition) {
await Domain.updateOne(
{ _id: domain._id },
{
$set: {
name: striptags(domainDefinition.name.trim().toLowerCase()),
},
},
);
}
async getSiteDomain ( ) {
return this.getByName(process.env.DTP_SITE_DOMAIN_KEY);
}
async getById (domainId) {
const domain = await Domain.findById(domainId).lean();
return domain;
}
async getByName (domainName) {
const domain = await Domain.findOne({ name: domainName.toLowerCase().trim() }).lean();
if (!domain) {
throw new SiteError(404, 'Domain does not exist');
}
return domain;
}
async getDomains (pagination) {
const domains = await Domain
.find()
.sort({ name: 1 })
.skip(pagination.skip)
.limit(pagination.cpp)
.lean();
return domains;
}
}
module.exports = {
slug: 'domain',
name: 'domain',
create: (dtp) => { return new DomainService(dtp); },
};

9
app/services/otp-auth.js

@ -17,16 +17,13 @@ const uuidv4 = require('uuid').v4;
const { SiteService, SiteError } = require('../../lib/site-lib');
class DomainService extends SiteService {
class OtpAuthService extends SiteService {
constructor (dtp) {
super(dtp, module.exports);
}
async start ( ) {
const { domain: domainService } = this.dtp.services;
this.siteDomain = await domainService.getSiteDomain();
authenticator.options = {
algorithm: 'sha1',
step: 30,
@ -72,7 +69,6 @@ class DomainService extends SiteService {
res.locals.otpAccount = await OtpAccount
.findOne({
domain: this.siteDomain._id,
user: req.user._id,
service: serviceName,
});
@ -136,7 +132,6 @@ class DomainService extends SiteService {
const now = new Date();
const account = await OtpAccount.create({
created: NOW,
domain: this.siteDomain._id,
user: req.user._id,
service,
secret,
@ -220,5 +215,5 @@ class DomainService extends SiteService {
module.exports = {
slug: 'otp-auth',
name: 'otpAuth',
create: (dtp) => { return new DomainService(dtp); },
create: (dtp) => { return new OtpAuthService(dtp); },
};

3
app/services/user.js

@ -253,8 +253,7 @@ class UserService {
const user = await User
.findById(userId)
.select('+email +flags +permissions')
.lean()
;
.lean();
if (!user) {
throw new SiteError(404, 'Member account not found');
}

26
app/views/admin/channel-application/index.pug

@ -1,26 +0,0 @@
extends ../layouts/main
block content
table.uk-table
thead
th Channel Name
th Domain
th Created
th Member
th Audience
th Status
tbody
each application in applications
tr
td
a(href=`/admin/channel-application/${application._id}`)= application.name
td= application.domain ? application.domain.name : 'N/A'
td= moment(application.created).fromNow()
td
a(href=`/admin/member/${application.owner._id}`)= application.owner.username
td= numeral(application.interview.audienceSize).format('0,0')
td(class={
'uk-text-primary': ['new','review'].includes(application.status),
'uk-text-success': (application.status === 'approved'),
'uk-text-danger': (application.status === 'rejected'),
})= application.status

79
app/views/admin/channel-application/view.pug

@ -1,79 +0,0 @@
extends ../layouts/main
block content
.uk-card.uk-card-secondary.uk-card-body.uk-margin
fieldset.uk-fieldset
legend.sr-only Channel Information
div(uk-grid)
.uk-width-expand
.uk-margin
label.uk-form-label Channel Name:
.uk-text-large.uk-text-bold= application.name
.uk-width-auto
.uk-margin
label.uk-form-label Owner:
div
a(href=`mailto:${application.owner.email}?subject=${encodeURIComponent(site.name)}${encodeURIComponent(': ')}${encodeURIComponent(application.name)}`)= application.owner.displayName || application.owner.email
.uk-width-auto
.uk-margin
label.uk-form-label Phone:
div
a(href=`tel:${application.contact.phone.number}`)= application.contact.phone.number
.uk-width-auto
.uk-margin
label.uk-form-label Submitted:
div= moment(application.created).fromNow()
.uk-margin
label.uk-form-label Description
div!= marked(application.description)
div(uk-grid)
.uk-width-auto
.uk-margin
label.uk-form-label Category
div= application.category.name
.uk-width-auto
.uk-margin
label.uk-form-label Short Name
div= application.slug
.uk-width-auto
.uk-margin
label.uk-form-label Search Tags
div= application.tags ? application.tags.join(',') : 'N/A'
.uk-card.uk-card-secondary.uk-card-body.uk-margin
fieldset.uk-fieldset
legend.uk-legend Interview
div(uk-grid)
div(class="uk-width-1-1 uk-width-auto@m")
.uk-margin
label.uk-form-label Audience Size
div= application.interview.audienceSize
div(class="uk-width-1-1 uk-width-auto@m")
.uk-margin
label.uk-form-label Demo URL
div
a(href= application.interview.demoUrl)= application.interview.demoUrl
.uk-margin
label.uk-form-label History
div!= marked(application.interview.history)
.uk-card.uk-card-secondary.uk-card-body.uk-margin
form(method="POST", action=`/admin/channel-application/${application._id}`).uk-form
.uk-margin
label(for="rejected-reason").uk-form-label Rejection explanation
textarea(id="rejected-reason", name="rejectedReason", rows="4", placeholder= "Enter reason for rejecting").uk-textarea
div(uk-grid)
.uk-width-auto
button(type="submit", name="action", value="approve").uk-button.uk-button-primary
span
i.fas.fa-check
span.uk-text-bold.uk-margin-small-left Approve
.uk-width-auto
button(type="submit", name="action", value="reject").uk-button.uk-button-danger
span
i.fas.fa-times
span.uk-text-bold.uk-margin-small-left Reject

28
app/views/admin/channel/index.pug

@ -1,28 +0,0 @@
extends ../layouts/main
block content
.uk-overflow-auto
table.uk-table.uk-table-small.uk-table-divider
thead
th Channel
th Owner
th Category
th Status
th Created
tbody
each channel in channels
tr
td
a(href=`/admin/channel/${channel._id}`)= channel.name
td
a(href=`/admin/user/${channel.owner._id}`)= channel.owner.username
td= channel.category.name
td(class={
'uk-text-success': (channel.status === 'live'),
'uk-text-default': (channel.status === 'offline'),
})= channel.status
td= moment(channel.created).format('MMM DD, YYYY')

13
app/views/admin/domain/form.pug

@ -1,13 +0,0 @@
extends ../layouts/main
block content
- var formAction = domain ? `/admin/domain/${domain._id}` : "/admin/domain";
h2 Domain Manager
form(method="POST", action= formAction).uk-form
.uk-margin
label(for="name").uk-form-label Name
input(id="name", name="name", type="text", placeholder= "Enter domain name", value= domain ? domain.name : undefined).uk-input
.uk-margin
button(type="submit").uk-button.uk-button-primary= domain ? 'Update domain' : 'Create domain'

18
app/views/admin/domain/index.pug

@ -1,18 +0,0 @@
extends ../layouts/main
block content
.uk-margin
div(uk-grid).uk-flex-middle
.uk-width-expand
h2 Domain Manager
.uk-width-auto
a(href="/admin/domain/create").uk-button.uk-button-primary
span
i.fas.fa-plus
span.uk-margin-small-left Add domain
.uk-margin
uk.uk-list
each domain in domains
li
a(href=`/admin/domain/${domain._id}`)= domain.name

4
app/views/components/navbar.pug

@ -6,7 +6,7 @@ nav(uk-navbar).uk-navbar-container.uk-position-fixed.uk-position-top
//- Site icon
a(href="/", class="uk-visible@m").uk-navbar-item
img(src=`/img/icon/${site.domainKey}/icon-48x48.png`)
img(src=`/img/icon/icon-48x48.png`)
//- Site name
a(href="/", class="uk-visible@xl").uk-navbar-item.uk-logo
@ -15,7 +15,7 @@ nav(uk-navbar).uk-navbar-container.uk-position-fixed.uk-position-top
//- Center menu (visible only on tablet and mobile)
div(class="uk-hidden@m").uk-navbar-center
a(href="/").uk-navbar-item
img(src=`/img/icon/${site.domainKey}/icon-48x48.png`)
img(src=`/img/icon/icon-48x48.png`)
.uk-navbar-right
.uk-navbar-item

32
app/views/components/pwa-support.pug

@ -1,19 +1,19 @@
link(rel="apple-touch-icon" sizes="57x57" href=`/img/icon/${site.domainKey}/icon-57x57.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="60x60" href=`/img/icon/${site.domainKey}/icon-60x60.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="72x72" href=`/img/icon/${site.domainKey}/icon-72x72.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="76x76" href=`/img/icon/${site.domainKey}/icon-76x76.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="114x114" href=`/img/icon/${site.domainKey}/icon-114x114.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="120x120" href=`/img/icon/${site.domainKey}/icon-120x120.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="144x144" href=`/img/icon/${site.domainKey}/icon-144x144.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="152x152" href=`/img/icon/${site.domainKey}/icon-152x152.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="180x180" href=`/img/icon/${site.domainKey}/icon-180x180.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="32x32" href=`/img/icon/${site.domainKey}/icon-32x32.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="96x96" href=`/img/icon/${site.domainKey}/icon-96x96.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="16x16" href=`/img/icon/${site.domainKey}/icon-16x16.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="512x512" href=`/img/icon/${site.domainKey}/icon-512x512.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="384x384" href=`/img/icon/${site.domainKey}/icon-384x384.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="256x256" href=`/img/icon/${site.domainKey}/icon-512x512.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="192x192" href=`/img/icon/${site.domainKey}/icon-192x192.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="57x57" href=`/img/icon/icon-57x57.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="60x60" href=`/img/icon/icon-60x60.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="72x72" href=`/img/icon/icon-72x72.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="76x76" href=`/img/icon/icon-76x76.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="114x114" href=`/img/icon/icon-114x114.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="120x120" href=`/img/icon/icon-120x120.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="144x144" href=`/img/icon/icon-144x144.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="152x152" href=`/img/icon/icon-152x152.png?v=${pkg.version}`)
link(rel="apple-touch-icon" sizes="180x180" href=`/img/icon/icon-180x180.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="32x32" href=`/img/icon/icon-32x32.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="96x96" href=`/img/icon/icon-96x96.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="16x16" href=`/img/icon/icon-16x16.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="512x512" href=`/img/icon/icon-512x512.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="384x384" href=`/img/icon/icon-384x384.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="256x256" href=`/img/icon/icon-512x512.png?v=${pkg.version}`)
link(rel="icon" type="image/png" sizes="192x192" href=`/img/icon/icon-192x192.png?v=${pkg.version}`)
link(rel="manifest" href=`/manifest.json?v=${pkg.version}`)
meta(name="msapplication-TileColor" content="#f1c52f")
meta(name="msapplication-TileImage" content=`/img/icon/ms-icon-144x144.png?v=${pkg.version}`)

4
app/workers/host-services.js

@ -620,10 +620,6 @@ module.expireNetHosts = async ( ) => {
* Site Platform startup
*/
await SitePlatform.startPlatform(module);
module.domain = await module.services.domain.getByName(process.env.DTP_SITE_DOMAIN_KEY);
if (!module.domain) {
throw new Error(`Must define domain ${process.env.DTP_SITE_DOMAIN_KEY}`);
}
module.log.info('starting transaction manager');
module.manager = new TransactionManager();

BIN
client/img/icon/altmedia.tv.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

BIN
client/img/icon/altmedia.tv/home.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

BIN
client/img/icon/altmedia.tv/icon-114x114.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

BIN
client/img/icon/altmedia.tv/icon-120x120.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

BIN
client/img/icon/altmedia.tv/icon-144x144.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

BIN
client/img/icon/altmedia.tv/icon-150x150.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

BIN
client/img/icon/altmedia.tv/icon-152x152.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

BIN
client/img/icon/altmedia.tv/icon-16x16.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 670 B

BIN
client/img/icon/altmedia.tv/icon-180x180.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

BIN
client/img/icon/altmedia.tv/icon-192x192.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

BIN
client/img/icon/altmedia.tv/icon-256x256.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

BIN
client/img/icon/altmedia.tv/icon-310x310.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

BIN
client/img/icon/altmedia.tv/icon-32x32.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

BIN
client/img/icon/altmedia.tv/icon-36x36.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

BIN
client/img/icon/altmedia.tv/icon-384x384.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

BIN
client/img/icon/altmedia.tv/icon-48x48.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

BIN
client/img/icon/altmedia.tv/icon-512x512.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

BIN
client/img/icon/altmedia.tv/icon-57x57.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

BIN
client/img/icon/altmedia.tv/icon-60x60.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

BIN
client/img/icon/altmedia.tv/icon-70x70.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

BIN
client/img/icon/altmedia.tv/icon-72x72.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

BIN
client/img/icon/altmedia.tv/icon-76x76.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

BIN
client/img/icon/altmedia.tv/icon-96x96.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

BIN
client/img/icon/freetopray.tv.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 KiB

BIN
client/img/icon/freetopray.tv/home.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

BIN
client/img/icon/freetopray.tv/icon-114x114.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

BIN
client/img/icon/freetopray.tv/icon-120x120.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

BIN
client/img/icon/freetopray.tv/icon-144x144.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

BIN
client/img/icon/freetopray.tv/icon-150x150.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

BIN
client/img/icon/freetopray.tv/icon-152x152.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

BIN
client/img/icon/freetopray.tv/icon-16x16.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 795 B

BIN
client/img/icon/freetopray.tv/icon-180x180.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

BIN
client/img/icon/freetopray.tv/icon-192x192.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

BIN
client/img/icon/freetopray.tv/icon-256x256.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

BIN
client/img/icon/freetopray.tv/icon-310x310.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

BIN
client/img/icon/freetopray.tv/icon-32x32.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

BIN
client/img/icon/freetopray.tv/icon-36x36.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

BIN
client/img/icon/freetopray.tv/icon-384x384.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

BIN
client/img/icon/freetopray.tv/icon-48x48.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

BIN
client/img/icon/freetopray.tv/icon-512x512.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 326 KiB

BIN
client/img/icon/freetopray.tv/icon-57x57.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

BIN
client/img/icon/freetopray.tv/icon-60x60.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

BIN
client/img/icon/freetopray.tv/icon-70x70.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

BIN
client/img/icon/freetopray.tv/icon-72x72.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
client/img/icon/freetopray.tv/icon-76x76.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

BIN
client/img/icon/freetopray.tv/icon-96x96.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

0
client/img/icon/justjoeradio.com/icon-114x114.png → client/img/icon/icon-114x114.png

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

0
client/img/icon/justjoeradio.com/icon-120x120.png → client/img/icon/icon-120x120.png

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

0
client/img/icon/justjoeradio.com/icon-144x144.png → client/img/icon/icon-144x144.png

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

0
client/img/icon/justjoeradio.com/icon-150x150.png → client/img/icon/icon-150x150.png

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

0
client/img/icon/justjoeradio.com/icon-152x152.png → client/img/icon/icon-152x152.png

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

0
client/img/icon/justjoeradio.com/icon-16x16.png → client/img/icon/icon-16x16.png

Before

Width:  |  Height:  |  Size: 581 B

After

Width:  |  Height:  |  Size: 581 B

0
client/img/icon/justjoeradio.com/icon-180x180.png → client/img/icon/icon-180x180.png

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

0
client/img/icon/justjoeradio.com/icon-192x192.png → client/img/icon/icon-192x192.png

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

0
client/img/icon/justjoeradio.com/icon-256x256.png → client/img/icon/icon-256x256.png

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

0
client/img/icon/justjoeradio.com/icon-310x310.png → client/img/icon/icon-310x310.png

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

0
client/img/icon/justjoeradio.com/icon-32x32.png → client/img/icon/icon-32x32.png

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

0
client/img/icon/justjoeradio.com/icon-36x36.png → client/img/icon/icon-36x36.png

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

0
client/img/icon/justjoeradio.com/icon-384x384.png → client/img/icon/icon-384x384.png

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

0
client/img/icon/justjoeradio.com/icon-48x48.png → client/img/icon/icon-48x48.png

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

0
client/img/icon/justjoeradio.com/icon-512x512.png → client/img/icon/icon-512x512.png

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 134 KiB

0
client/img/icon/justjoeradio.com/icon-57x57.png → client/img/icon/icon-57x57.png

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

0
client/img/icon/justjoeradio.com/icon-60x60.png → client/img/icon/icon-60x60.png

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

0
client/img/icon/justjoeradio.com/icon-70x70.png → client/img/icon/icon-70x70.png

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

0
client/img/icon/justjoeradio.com/icon-72x72.png → client/img/icon/icon-72x72.png

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

0
client/img/icon/justjoeradio.com/icon-76x76.png → client/img/icon/icon-76x76.png

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

0
client/img/icon/justjoeradio.com/icon-96x96.png → client/img/icon/icon-96x96.png

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

BIN
client/img/icon/shing.tv.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

BIN
client/img/icon/shing.tv/home.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

BIN
client/img/icon/shing.tv/icon-114x114.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

BIN
client/img/icon/shing.tv/icon-120x120.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

BIN
client/img/icon/shing.tv/icon-144x144.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

BIN
client/img/icon/shing.tv/icon-150x150.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

BIN
client/img/icon/shing.tv/icon-152x152.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

BIN
client/img/icon/shing.tv/icon-16x16.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 685 B

BIN
client/img/icon/shing.tv/icon-180x180.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

BIN
client/img/icon/shing.tv/icon-192x192.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

BIN
client/img/icon/shing.tv/icon-256x256.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

BIN
client/img/icon/shing.tv/icon-310x310.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

BIN
client/img/icon/shing.tv/icon-32x32.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save