LTI Launch Test - Class -dev1

Whenever a launch is triggered, the configuration parameters are applied, new nonce and timestamp values are obtained, and a new OAuth signature is calculated. The "Refresh" button does the same, without triggering a launch. Current support is for LTI 1.0/1.1 Adapted from Lance's implementation and customized for testing dashboards

HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/hmac-sha1.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/enc-base64.js"></script>
<p><em>Remember to click on "Refresh" at the bottom of the form before launching!!</em>

</p>

<h2>LTI configuration parameters</h2>
<form id="ltiConfigurationForm" onsubmit="updateLtiLaunchForm(); return false;">
    <ul>http://jsfiddle.net/prakgarnly/sd20tL6b/56/#run
        <li>
            <label>Launch URL:
                <select id="launchUrl" name="launchUrl">
                  <option value="https://master-dev.intellify.io/ltilaunch/">MDev</option>
                  <option value="https://hmh2.intellifylearning.com/ltilaunch/">HMH2</option>
                  <option value="https://hmhprod2.intellifylearning.com/ltilaunch/">HMHProd2</option>
                  <option value="https://dev1.intellifylearning.com/ltilaunch/">Dev1</option>
                  <option value="https://hmhprod1.intellifylearning.com/ltilaunch/">HMHProd1</option>
                </select>
            </label>
        </li>
        <li>
          <label>View ID:
<!--                 <input id="viewId" value="" type="text" />
                 -->
                <select id="viewId" name="viewId">
                  <option value="5617ef920cf2bffa80028a9c">SRI Prod</option>
                  <option value="56c1501d0cf2d0dccad5e0bf">SRI WC</option>
                  <option value="55f9c01a0cf2011135f8754f">SPI Prod</option>
                  <option value="56a792a30cf285c7fc5f1975">SPI WC</option>
                  <option value="561dc1310cf29cf10bd93079">R180U Prod</option>
                  <option value="561dc1310cf29cf10bd93079">R180U WC</option>
                </select>            
            </label>
        </li>
        <li>
            <label>Key:
                <input id="key" value="" type="text" size="80" />
            </label>
        </li>
        <li>
            <label>Secret:
   ...

CSS

input:read-only {
    background-color: #D6D6D6;
}
em {
    background-color: #FFD666;
}
label.sri {
    background-color: #FFD666;
}
input#launchUrl {
    width: 90%
}
input{
    width: 60%;
}

JavaScript

(function () {
    window.onload = function () {
        

// spi class
$('#launchUrl').val('https://dev1.intellifylearning.com/ltilaunch/');
$('#viewId').val('55f9c01a0cf2011135f8754f');
$('#key').val('DR3O_WSDQgyNXen3au5Qmg');
$('#secret').val('87af2996-edf6-4d0e-a3e2-df2b85b2d4b1');
$('#custom_siteId').val('h900000031');
$('#custom_classId').val('1bu96flg6jj9ul1103967vhk_v8q9qq0');
$('#custom_studentId').val('');

        updateLtiLaunchForm();
    };

    this.updateLtiLaunchForm = function () {
        var launchUrl = $('#launchUrl').val() + $('#viewId').val();
        var encodedSecret = encodeURIComponent($('#secret').val()) + '&';
        var $ltiLaunchForm = $('#ltiLaunchForm');

        $ltiLaunchForm.attr('action', launchUrl);
        $('#oauth_consumer_key').val($('#key').val());
        $('#oauth_timestamp').val(Math.floor(new Date().getTime() / 1000));
        $('#oauth_nonce').val(uniqid('', true));

        var fields = [];
        $('input[type="text"]', $ltiLaunchForm).not('[name="oauth_signature"]').not('[name="custom_param_1_label"]').each(function () {
            var input = $(this);
            fields.push(input.attr('name') + '=' + rawurlencode(input.val()));
        });
        $('select', $ltiLaunchForm).not('[name="oauth_signature"]').not('[name="custom_param_1_label"]').each(function () {
            var input = $(this);
            fields.push(input.attr('name') + '=' + rawurlencode(input.val()));
        });
        
        console.log(fields)

        var message = 'POST&' + encodeURIComponent(launchUrl) + '&' + rawurlencode(fields.sort().join('&'));

        console.log(message);
        
        var oauthSignature = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA1(message, encodedSecret));
        $('#oauth_signature').val(oauthSignature);
        };

        this.rawurlencode = function (str) {
            str = (str + '').toString();
            return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g,...