mirror of
https://github.com/ijprest/keyboard-layout-editor.git
synced 2026-04-27 17:40:44 -07:00
Basic GitHub login via OAuth
This commit is contained in:
parent
44ab242e1a
commit
b7f42d5177
5 changed files with 85 additions and 3 deletions
1
Makefile
1
Makefile
|
|
@ -64,6 +64,7 @@ $(call BOWER,bower_components/jquery/jquery.min.js)
|
|||
$(call BOWER,bower_components/angular/angular.min.js)
|
||||
$(call BOWER,bower_components/angular-bootstrap-colorpicker/css/colorpicker.min.css)
|
||||
$(call BOWER,bower_components/angular-sanitize/angular-sanitize.min.js)
|
||||
$(call BOWER,bower_components/angular-cookies/angular-cookies.min.js)
|
||||
$(call BOWER,bower_components/angular-ui-utils/components/angular-ui-docs/build/ui-utils.min.js)
|
||||
$(call BOWER,bower_components/ng-file-upload/ng-file-upload.min.js)
|
||||
$(call BOWER,bower_components/angular-native-dragdrop/draganddrop.js)
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@
|
|||
"ng-file-upload": "5.0.9",
|
||||
"angular-ui-bootstrap": "0.12.0",
|
||||
"fontawesome": "4.3.0",
|
||||
"hint.css": "1.3.5"
|
||||
"hint.css": "1.3.5",
|
||||
"angular-cookies": "1.2.28"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
6
kb.html
6
kb.html
|
|
@ -16,6 +16,7 @@ All rights reserved.
|
|||
<script type="text/javascript" src="js/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="js/angular.min.js"></script>
|
||||
<script type="text/javascript" src="js/angular-sanitize.min.js"></script>
|
||||
<script type="text/javascript" src="js/angular-cookies.min.js"></script>
|
||||
<script type="text/javascript" src="js/ui-utils.min.js"></script>
|
||||
<script type="text/javascript" src="js/ui-bootstrap-tpls-0.12.0.min.js"></script>
|
||||
<script type="text/javascript" src="js/crypto-js.js"></script>
|
||||
|
|
@ -100,6 +101,8 @@ Nav Bar / Header
|
|||
<li><a href="#" ng-click="showOptions()"><i class="fa fa-cog"></i> Options</a></li>
|
||||
<!-- Permalink button -->
|
||||
<li><a ng-href="{{getPermalink()}}" target="_blank" ng-click="dirty = false"><i class="fa fa-link"></i> Permalink</a></li>
|
||||
<!-- User button -->
|
||||
<li><a href="#" ng-click="userLogin()" ng-hide="oauthToken"><i class="fa fa-github"></i> Sign in with GitHub</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
|
@ -609,6 +612,9 @@ Nav Bar / Header
|
|||
<alert type="danger" ng-hide="!loadError" close="loadError=false" ng-cloak>
|
||||
The requested layout does not exist.
|
||||
</alert>
|
||||
<alert type="danger" ng-hide="!oauthError" close="oauthError=null" ng-cloak>
|
||||
An error occurred during login: {{oauthError}}
|
||||
</alert>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
|||
36
kb.js
36
kb.js
|
|
@ -11,13 +11,13 @@
|
|||
function fromJsonPretty(json) { return $serial.fromJsonL('['+json+']'); }
|
||||
|
||||
// The angular module for our application
|
||||
var kbApp = angular.module('kbApp', ["ngSanitize", "ui.utils", "ui.bootstrap", "ui.bootstrap.tooltip", "ngFileUpload", "ang-drag-drop", "colorpicker.module"], function($tooltipProvider) {
|
||||
var kbApp = angular.module('kbApp', ["ngSanitize", "ngCookies", "ui.utils", "ui.bootstrap", "ui.bootstrap.tooltip", "ngFileUpload", "ang-drag-drop", "colorpicker.module"], function($tooltipProvider) {
|
||||
// Default tooltip behaviour
|
||||
$tooltipProvider.options({animation: false, appendToBody: true});
|
||||
});
|
||||
|
||||
// The main application controller
|
||||
kbApp.controller('kbCtrl', ['$scope','$http','$location','$timeout', '$sce', '$sanitize', '$modal', function($scope, $http, $location, $timeout, $sce, $sanitize, $modal) {
|
||||
kbApp.controller('kbCtrl', ['$scope','$http','$location','$timeout', '$sce', '$sanitize', '$modal', '$cookies', function($scope, $http, $location, $timeout, $sce, $sanitize, $modal, $cookies) {
|
||||
var serializedTimer = false;
|
||||
var customStylesTimer = false;
|
||||
|
||||
|
|
@ -1073,6 +1073,38 @@
|
|||
|
||||
$scope.keyboardTop = function() { var kbElem = $("#keyboard"); return kbElem.position().top + parseInt(kbElem.css('margin-top'),10); };
|
||||
$scope.keyboardLeft = function() { var kbElem = $("#keyboard"); return kbElem.position().left + parseInt(kbElem.css('margin-left'),10); };
|
||||
|
||||
var userLoginSecret;
|
||||
$scope.oauthToken = $cookies.oauthToken;
|
||||
$scope.userLogin = function() {
|
||||
if(!userLoginSecret && !$scope.oauthToken) {
|
||||
$scope.oauthToken = null;
|
||||
var parms = "&client_id=631d93caeaa61c9057ab&redirect_uri=http://localhost:8080/oauth.html";
|
||||
userLoginSecret = (window.performance && window.performance.now ? window.performance.now() : Date.now()).toString() + "_" + (Math.random()).toString();
|
||||
var loginWindow = window.open("https://github.com/login/oauth/authorize?scope=gist&state="+userLoginSecret+parms,
|
||||
"Sign in with Github", "left="+(window.left+50)+",top="+(window.top+50)+",width=1050,height=630,personalbar=0,toolbar=0,scrollbars=1,resizable=1");
|
||||
if(loginWindow) {
|
||||
loginWindow.focus();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$scope.oauthError = null;
|
||||
window.__oauthError = function(error) {
|
||||
userLoginSecret = null;
|
||||
$scope.oauthError = error || 'Unknown error.';
|
||||
$scope.oauthToken = null;
|
||||
};
|
||||
|
||||
window.__oauthSuccess = function(code, secret) {
|
||||
if(secret !== userLoginSecret) {
|
||||
window.__oauthError('The server returned an incorrect login secret.');
|
||||
} else {
|
||||
userLoginSecret = null;
|
||||
$scope.oauthToken = code;
|
||||
$cookies.oauthToken = $scope.oauthToken;
|
||||
}
|
||||
};
|
||||
}]);
|
||||
|
||||
// Simple modal-popup controller
|
||||
|
|
|
|||
42
oauth.html
Normal file
42
oauth.html
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
<!--***********************************************
|
||||
KEYBOARD LAYOUT EDITOR
|
||||
Copyright (C) 2013-2015 Ian Prest
|
||||
All rights reserved.
|
||||
************************************************-->
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Keyboard Layout Editor</title>
|
||||
<meta charset="utf-8">
|
||||
<script type="text/javascript" src="js/jquery.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript">
|
||||
if(!window.opener) {
|
||||
window.close();
|
||||
}
|
||||
|
||||
var code = (window.location.href.match(/[\?\&]code=([^\&]*)/) || [null])[1];
|
||||
var state = (window.location.href.match(/[\?\&]state=([^\&]*)/) || [null])[1];
|
||||
if(code && state) {
|
||||
$.getJSON('http://kle-gatekeeper.azurewebsites.net/authenticate/'+code, function(data) {
|
||||
if(data.error) {
|
||||
window.opener.__oauthError('Gatekeeper returned an error code: ' + data.error);
|
||||
} else if(!data.token) {
|
||||
window.opener.__oauthError('Gatekeeper did not return an OAuth token.');
|
||||
} else {
|
||||
window.opener.__oauthSuccess(code, state);
|
||||
}
|
||||
window.close();
|
||||
}).fail(function() {
|
||||
window.opener.__oauthError('Could not communicate with the gatekeeper process.');
|
||||
window.close();
|
||||
});
|
||||
} else {
|
||||
window.opener.__oauthError('Redirect called with incorrect parameters.');
|
||||
window.close();
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue