return function(req, res) { var folderName = moniker.choose() + '-' + Math.round(Math.random() * 1000); var installHTMLFilename = 'install.html'; var appHTMLFilename = 'index.html'; var manifestFilename = 'manifest.webapp'; var remoteURLPrefix = urlManager.createURLPrefix(folderName); var remoteURLs = { install: remoteURLPrefix + installHTMLFilename, app: remoteURLPrefix + appHTMLFilename, manifest: remoteURLPrefix + manifestFilename }; var inputData = req.body; var manifest = inputData.manifest || {}; function cleanString (str, removeQuotes) { str = str.replace(/>/g, '>').replace(/</g, '<'); if (removeQuotes) { str = str.replace(/'/g, '').replace(/"/g, '') } return str; } var requestHTML = inputData.html; // core appmaker components var coreComponents = app.locals.components var appComponents = [ //... mine the requestHTML for these? ... ]; var appStr = templates.publish({ appHTML: requestHTML, appName: folderName, gettext: req.gettext, ceciComponentURL: process.env.ASSET_HOST, remixURL: encodeURIComponent(encodeURIComponent(remoteURLs.app)), bundles: app.locals.bundles, components: coreComponents.concat(appComponents) }); var installStr = templates.install({ iframeSrc: remoteURLs.app, manifestUrl: remoteURLs.manifest, gettext: req.gettext }); var manifestJSON = { "name": 'My App - ' + folderName, "description": 'My App - ' + folderName, "launch_path": '/index.html', "developer": { "name": "Flathead", "url": "https://appmaker.mozillalabs.com/" }, "icons": { "60": "/style/icons/icon-60.png", "79": "/style/icons/icon-79.png" }, "default_locale": "en" }; var outputFiles = [ {filename: urlManager.objectPrefix + '/' + folderName + '/' + manifestFilename, data: JSON.stringify(manifestJSON), // According to https://developer.mozilla.org/en-US/docs/Web/Apps/Manifest#Serving_manifests contentType: 'application/x-web-app-manifest+json'}, {filename: urlManager.objectPrefix + '/' + folderName + '/' + appHTMLFilename, data: appStr}, {filename: urlManager.objectPrefix + '/' + folderName + '/' + installHTMLFilename, data: installStr} ]; var filesDone = 0; outputFiles.forEach(function (description) { store.write(description.filename, description.data, function (result) { if (200 !== result.statusCode) { console.error('Trouble writing ' + description.filename + ' to S3 (' + result.statusCode + ').'); } if (++filesDone === outputFiles.length) { res.json({error: null, app: remoteURLs.app, install: remoteURLs.install, manifest: remoteURLs.manifest }, 200); // Don't wait for the MakeAPI to deliver url to user makeAPIPublisher.publish({ url: remoteURLs.install, thumbnail: 'http://appmaker.mozillalabs.com/images/mail-man.png', tags: ['appmaker'], description: 'Appmaker ' + folderName, title: 'Appmaker ' + folderName, email: req.session.email }, function (err, make) { if (err) { console.error(err); } }); } }, description.contentType); }); metrics.increment('appmaker.live.app_published'); };
app.server.use(function (req, res, next) { metrics.increment('request.counter'); next(); });
verify.filter(requestHTML, function (filteredHTML) { var appStr = templates.publish({ appHTML: filteredHTML, appName: folderName }); var installStr = templates.install({ iframeSrc: remoteURLs.app, manifestUrl: remoteURLs.manifest }); var manifestJSON = { "name": 'My App - ' + folderName, "description": 'My App - ' + folderName, "launch_path": '/index.html', "developer": { "name": "Flathead", "url": "https://appmaker.mozillalabs.com/" }, "icons": { "60": "/style/icons/icon-60.png", "79": "/style/icons/icon-79.png" }, "default_locale": "en" }; var outputFiles = [ {filename: urlManager.objectPrefix + '/' + folderName + '/' + manifestFilename, data: JSON.stringify(manifestJSON), // According to https://developer.mozilla.org/en-US/docs/Web/Apps/Manifest#Serving_manifests contentType: 'application/x-web-app-manifest+json'}, {filename: urlManager.objectPrefix + '/' + folderName + '/' + appHTMLFilename, data: appStr}, {filename: urlManager.objectPrefix + '/' + folderName + '/' + installHTMLFilename, data: installStr} ]; var filesDone = 0; outputFiles.forEach(function (description) { store.write(description.filename, description.data, function (result) { if (200 !== result.statusCode) { console.error('Trouble writing ' + description.filename + ' to S3 (' + result.statusCode + ').'); } if (++filesDone === outputFiles.length) { res.json({error: null, app: remoteURLs.app, install: remoteURLs.install, manifest: remoteURLs.manifest }, 200); // Don't wait for the MakeAPI to deliver url to user makeAPIPublisher.publish({ url: remoteURLs.install, thumbnail: 'http://appmaker.mozillalabs.com/images/mail-man.png', tags: ['appmaker'], description: 'Appmaker ' + folderName, title: 'Appmaker ' + folderName, }, function (err, make) { if (err) { console.error(err); } }); } }, description.contentType); }); metrics.increment('appmaker.live.app_published'); });
inc: function () { lynx.increment(name); parent.inc(); },
getUserComponents(req, function (userComponents) { var appStr = templates.publish({ appHTML: requestHTML, folderName: folderName, appName: appName, gettext: req.gettext, ceciComponentURL: process.env.ASSET_HOST, remixURL: encodeURIComponent(encodeURIComponent(remoteURLs.app)), bundles: app.locals.bundles, components: coreComponents.concat(appComponents), userComponents: userComponents }); var installStr = templates.install({ iframeSrc: remoteURLs.app, manifestUrl: remoteURLs.manifest, gettext: req.gettext }); var manifestJSON = { "name": 'My App - ' + folderName, "description": 'My App - ' + folderName, "launch_path": launchPath, "developer": { "name": "App Maker", "url": "https://appmaker.mozillalabs.com/" }, "icons": { "60": "/style/icons/icon-60.png", "79": "/style/icons/icon-79.png" }, "default_locale": "en", "permissions": { "audio-capture": { "description": "We'd like to use your microphone" }, "video-capture": { "description": "We'd like to use your camera" } } }; var outputFiles = [ {filename: urlManager.objectPrefix + '/' + folderName + '/' + manifestFilename, data: JSON.stringify(manifestJSON), // According to https://developer.mozilla.org/en-US/docs/Web/Apps/Manifest#Serving_manifests contentType: 'application/x-web-app-manifest+json'}, {filename: urlManager.objectPrefix + '/' + folderName + '/' + appHTMLFilename, data: appStr}, {filename: urlManager.objectPrefix + '/' + folderName + '/' + installHTMLFilename, data: installStr} ]; var filesDone = 0; outputFiles.forEach(function (description) { store.write(description.filename, description.data, function (result) { if (200 !== result.statusCode) { console.error('Trouble writing ' + description.filename + ' to S3 (' + result.statusCode + ').'); } if (++filesDone === outputFiles.length) { res.json({error: null, app: remoteURLs.app, install: remoteURLs.install, manifest: remoteURLs.manifest }, 200); // Don't wait for the MakeAPI to deliver url to user makeAPIPublisher.publish({ url: remoteURLs.install, remix: remoteURLs.app, thumbnail: 'http://appmaker.mozillalabs.com/images/mail-man.png', tags: ['appmaker'], description: 'Appmaker ' + appName, title: appName, email: req.session.email, author: userName, locale: req.localeInfo.lang }, function (err, make) { if (err) { console.error(err); } }); } }, description.contentType); }); metrics.increment('appmaker.live.app_published'); });