forked from coolaj86/walnut.js
		
	
		
			
				
	
	
		
			113 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
$(function () {
 | 
						|
  'use strict';
 | 
						|
 | 
						|
  var apiHostname = window.location.hostname.replace(/^www\./, '');
 | 
						|
  var hostname = window.location.hostname.replace(/^www\./, '');
 | 
						|
  var baseUrl;
 | 
						|
 | 
						|
  $.http = $.ajax;
 | 
						|
  if (/[a-z]+/.test(apiHostname)) {
 | 
						|
    apiHostname = 'api.' + apiHostname;
 | 
						|
  }
 | 
						|
  else {
 | 
						|
    apiHostname = '';
 | 
						|
  }
 | 
						|
  baseUrl = window.location.protocol.replace(/:$/, '')
 | 
						|
    + '://' + apiHostname
 | 
						|
    + window.location.host.replace(/^www\./, '').replace(/.[^:]+(:(\d+))?/, '$2')
 | 
						|
  ;
 | 
						|
 | 
						|
  function readConfig() {
 | 
						|
    $('input.js-domain').val(hostname);
 | 
						|
 | 
						|
    return $.http({
 | 
						|
      method: 'GET'
 | 
						|
    , url: baseUrl + '/api/com.daplie.walnut.init'
 | 
						|
    , headers: {
 | 
						|
        "Accept" : "application/json; charset=utf-8"
 | 
						|
      }
 | 
						|
    }).then(function (results) {
 | 
						|
      results.le = results.le || {};
 | 
						|
      $('input.js-agree-tos').prop('checked', results.le.agreeTos);
 | 
						|
      $('input.js-email').val(results.le.email || results.email);
 | 
						|
      $('.js-devicename').text(results.hostname);
 | 
						|
      $('.js-inets').text(
 | 
						|
        results.inets.map(function (a) {
 | 
						|
          return 'IPv' + a.family + ' ' + a.address;
 | 
						|
        }).join('\n')
 | 
						|
        + '\n\n'
 | 
						|
        + '# set this device to your account\n'
 | 
						|
        + "daplie devices:set -d '" + results.hostname + "'"
 | 
						|
          + " -a '" + results.inets.map(function (a) { return a.address; }).join() + "'\n"
 | 
						|
        + '\n'
 | 
						|
        + '# attach this device to the necessary subdomains\n'
 | 
						|
        + "daplie devices:attach -d '" + results.hostname + "'"
 | 
						|
          + " -n '" + ($('input.js-domain').val() || '<<domainname>>') + "'\n"
 | 
						|
        + "daplie devices:attach -d '" + results.hostname + "'"
 | 
						|
          + " -n 'www." + ($('input.js-domain').val() || '<<domainname>>') + "'\n"
 | 
						|
        + "daplie devices:attach -d '" + results.hostname + "'"
 | 
						|
          + " -n 'api." + ($('input.js-domain').val() || '<<domainname>>') + "'\n"
 | 
						|
        + "daplie devices:attach -d '" + results.hostname + "'"
 | 
						|
          + " -n 'assets." + ($('input.js-domain').val() || '<<domainname>>') + "'\n"
 | 
						|
        + "daplie devices:attach -d '" + results.hostname + "'"
 | 
						|
          + " -n 'cloud." + ($('input.js-domain').val() || '<<domainname>>') + "'\n"
 | 
						|
        + "daplie devices:attach -d '" + results.hostname + "'"
 | 
						|
          + " -n 'api.cloud." + ($('input.js-domain').val() || '<<domainname>>') + "'"
 | 
						|
      );
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  readConfig();
 | 
						|
 | 
						|
  $('body').on('submit', 'form.js-form-le', function (ev) {
 | 
						|
    ev.preventDefault();
 | 
						|
 | 
						|
    var data = {
 | 
						|
      domain: $('input.js-domain').val()
 | 
						|
    , email: $('input.js-email').val()
 | 
						|
    , agreeTos: $('input.js-agree-tos').prop('checked')
 | 
						|
    };
 | 
						|
 | 
						|
    if (!data.domain) {
 | 
						|
      window.alert("Please enter the primary domain of this device.");
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    if (!data.email) {
 | 
						|
      window.alert("Please enter the email of the owner of this device.");
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    if (!data.agreeTos) {
 | 
						|
      window.alert("Please click to agree to the Let's Encrypt Subscriber Agreement. This server cannot function without encryption. Currently you must use Let's Encrypt. In the future we will enable other options.");
 | 
						|
      return;
 | 
						|
    }
 | 
						|
 | 
						|
    $.http({
 | 
						|
      method: 'POST'
 | 
						|
    , url: baseUrl + '/api/com.daplie.walnut.init'
 | 
						|
    , headers: {
 | 
						|
        "Accept" : "application/json; charset=utf-8"
 | 
						|
      , "Content-Type": "application/json; charset=utf-8"
 | 
						|
      }
 | 
						|
    , data: JSON.stringify(data)
 | 
						|
    }).then(function (data) {
 | 
						|
      var d;
 | 
						|
      if (data.error) {
 | 
						|
        d = $.Deferred();
 | 
						|
        d.reject(new Error(data.error.message));
 | 
						|
        return d.promise();
 | 
						|
      }
 | 
						|
      return data;
 | 
						|
    }).then(function (data) {
 | 
						|
      console.log('Result:');
 | 
						|
      console.log(data);
 | 
						|
      if (window.confirm('Hoo hoo! That tickles! Reload page now?')) {
 | 
						|
        window.location.reload();
 | 
						|
      }
 | 
						|
    }, function (err) {
 | 
						|
      console.error('Error POSTing form:');
 | 
						|
      console.error(err);
 | 
						|
      window.alert("Check the console! There's a big, fat error!");
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |