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, '&gt;').replace(/</g, '&lt;');
          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');
      };
Example #2
0
app.server.use(function (req, res, next) {
  metrics.increment('request.counter');
  next();
});
Example #3
0
      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');
      });
Example #4
0
 inc: function () {
     lynx.increment(name);
     parent.inc();
 },
Example #5
0
        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');
        });