diff --git a/html5/verto/verto_communicator/Gruntfile.js b/html5/verto/verto_communicator/Gruntfile.js index cef6d68276..13ad96523d 100644 --- a/html5/verto/verto_communicator/Gruntfile.js +++ b/html5/verto/verto_communicator/Gruntfile.js @@ -281,6 +281,7 @@ module.exports = function (grunt) { src: [ '*.{ico,png,txt}', '*.html', + '*.json', 'partials/**/*.html', 'images/{,*/}*.{webp}', 'css/fonts/{,*/}*.*', diff --git a/html5/verto/verto_communicator/bower.json b/html5/verto/verto_communicator/bower.json index 623a51d1cc..c69b4785d5 100644 --- a/html5/verto/verto_communicator/bower.json +++ b/html5/verto/verto_communicator/bower.json @@ -32,6 +32,7 @@ "angular-prompt": "~1.1.1", "angular-animate": "~1.3.15", "angular-cookies": "~1.3.15", + "angular-directive.g-signin": "~0.1.2", "jquery": "~2.1.4", "angular-fullscreen": "~1.0.1", "ngstorage": "~0.3.9", diff --git a/html5/verto/verto_communicator/src/config.json b/html5/verto/verto_communicator/src/config.json new file mode 100644 index 0000000000..e7b09aae95 --- /dev/null +++ b/html5/verto/verto_communicator/src/config.json @@ -0,0 +1,4 @@ +{ + "login": "1008", + "password": "1234" +} diff --git a/html5/verto/verto_communicator/src/config.json.sample b/html5/verto/verto_communicator/src/config.json.sample new file mode 100644 index 0000000000..a905c6161d --- /dev/null +++ b/html5/verto/verto_communicator/src/config.json.sample @@ -0,0 +1,13 @@ +{ + "extension": "3500", + "name": "Ken Rice", + "email": "krice@freeswitch.org", + "cid": "1008", + "textTo": "1000", + "login": "1008", + "password": "1234", + "autologin": "true", + "autocall": "3500", + "googlelogin": "true", + "wsURL": "wss://gamma.tollfreegateway.com/wss2" +} diff --git a/html5/verto/verto_communicator/src/contributors.txt b/html5/verto/verto_communicator/src/contributors.txt index cf34cd6bd0..bc309438b2 100644 --- a/html5/verto/verto_communicator/src/contributors.txt +++ b/html5/verto/verto_communicator/src/contributors.txt @@ -2,5 +2,6 @@ "Jonatas Oliveira ", "Ítalo Rossi ", "Stefan Yohansson ", - "João Mesquita " + "João Mesquita ", + "Ken Rice " ] diff --git a/html5/verto/verto_communicator/src/index.html b/html5/verto/verto_communicator/src/index.html index 0719ad4e9c..5945f72fe5 100644 --- a/html5/verto/verto_communicator/src/index.html +++ b/html5/verto/verto_communicator/src/index.html @@ -71,6 +71,7 @@ + @@ -121,9 +122,9 @@ - + diff --git a/html5/verto/verto_communicator/src/partials/login.html b/html5/verto/verto_communicator/src/partials/login.html index 9df7ba184b..42a1edbe55 100644 --- a/html5/verto/verto_communicator/src/partials/login.html +++ b/html5/verto/verto_communicator/src/partials/login.html @@ -4,6 +4,7 @@

Login

+

Verify the fields bellow and try again.

@@ -45,9 +46,14 @@
-
- Settings - + +
+ +
+
+ + +
diff --git a/html5/verto/verto_communicator/src/vertoApp/vertoApp.module.js b/html5/verto/verto_communicator/src/vertoApp/vertoApp.module.js index c12eee4d6b..2c7cffc381 100644 --- a/html5/verto/verto_communicator/src/vertoApp/vertoApp.module.js +++ b/html5/verto/verto_communicator/src/vertoApp/vertoApp.module.js @@ -13,6 +13,7 @@ 'cgPrompt', '720kb.tooltips', 'ui.gravatar', + 'directive.g+signin', ]); vertoApp.config(['$routeProvider', 'gravatarServiceProvider', @@ -33,11 +34,6 @@ templateUrl: 'partials/incall.html', controller: 'InCallController' }). - /*when('/contributors', { - title: 'Contributors', - templateUrl: 'partials/contributors.html', - controller: 'ContributorsController', - }).*/ when('/browser-upgrade', { title: '', templateUrl: 'partials/browser_upgrade.html', @@ -95,4 +91,4 @@ } ]); -})(); \ No newline at end of file +})(); diff --git a/html5/verto/verto_communicator/src/vertoControllers/controllers/DialPadController.js b/html5/verto/verto_communicator/src/vertoControllers/controllers/DialPadController.js index dde658af16..8c7589c93d 100644 --- a/html5/verto/verto_communicator/src/vertoControllers/controllers/DialPadController.js +++ b/html5/verto/verto_communicator/src/vertoControllers/controllers/DialPadController.js @@ -31,7 +31,18 @@ * fill dialpad via querystring [?autocall=\d+] */ if ($location.search().autocall) { - $rootScope.dialpadNumber = $location.search().autocall; + $rootScope.dialpadNumber = $location.search().autocall; + delete $location.search().autocall; + call($rootScope.dialpadNumber); + } + + /** + * fill in dialpad via config.json + */ + if ('autocall' in verto.data) { + $rootScope.dialpadNumber = verto.data.autocall; + delete verto.data.autocall; + call($rootScope.dialpadNumber); } /** @@ -49,10 +60,7 @@ verto.data.call.transfer($rootScope.dialpadNumber); }; - /** - * Call to the number in the $rootScope.dialpadNumber. - */ - $rootScope.call = function(extension) { + function call(extension) { storage.data.onHold = false; storage.data.cur_call = 0; $rootScope.dialpadNumber = extension; @@ -79,6 +87,13 @@ CallHistory.add($rootScope.dialpadNumber, 'outbound'); $location.path('/incall'); } + + /** + * Call to the number in the $rootScope.dialpadNumber. + */ + $rootScope.call = function(extension) { + return call(extension); + } } ]); diff --git a/html5/verto/verto_communicator/src/vertoControllers/controllers/LoginController.js b/html5/verto/verto_communicator/src/vertoControllers/controllers/LoginController.js index 6ea36372cf..4277898618 100644 --- a/html5/verto/verto_communicator/src/vertoControllers/controllers/LoginController.js +++ b/html5/verto/verto_communicator/src/vertoControllers/controllers/LoginController.js @@ -1,25 +1,59 @@ (function() { - 'use strict'; + 'use strict'; - angular - .module('vertoControllers') - .controller('LoginController', ['$scope', '$http', '$location', - 'verto', - function($scope, $http, $location, verto) { - $scope.checkBrowser(); + angular + .module('vertoControllers') + .controller('LoginController', ['$scope', '$http', '$location', 'verto', + function($scope, $http, $location, verto) { + $scope.checkBrowser(); - /** - * using stored data (localStorage) for logon - */ - verto.data.name = $scope.storage.data.name; - verto.data.email = $scope.storage.data.email; - if ($scope.storage.data.login != '' && $scope.storage.data.password != '') { - verto.data.login = $scope.storage.data.login; - verto.data.password = $scope.storage.data.password; - } + /* + * Load the Configs before logging in + * with cache buster + */ + + $http.get(window.location.pathname + '/config.json?cachebuster=' + Math.floor((Math.random()*1000000)+1)) + .success(function(data) { + + /* save these for later as we're about to possibly over write them */ + var name = verto.data.name; + var email = verto.data.email; + + console.debug("googlelogin: " + data.googlelogin); + if (data.googlelogin){ + $scope.googlelogin = data.googlelogin; + } + + angular.extend(verto.data, data); + + /** + * use stored data (localStorage) for login, allow config.json to take precedence + */ + + if (name != '' && data.name == '') { + verto.data.name = name; + } + if (email != '' && data.email == '') { + verto.data.email = email; + } + if (verto.data.login == '' && verto.data.password == '' && $scope.storage.data.login != '' && $scope.storage.data.password != '') { + verto.data.login = $scope.storage.data.login; + verto.data.password = $scope.storage.data.password; + } + + if (verto.data.autologin == "true" && !verto.data.autologin_done) { + console.debug("auto login per config.json"); + verto.data.autologin_done = true; + $scope.login(); + } + }); + + verto.data.name = $scope.storage.data.name; + verto.data.email = $scope.storage.data.email; + + console.debug('Executing LoginController.'); + } + ]); + +})(); - console.debug('Executing LoginController.'); - } - ]); - -})(); \ No newline at end of file diff --git a/html5/verto/verto_communicator/src/vertoControllers/controllers/MainController.js b/html5/verto/verto_communicator/src/vertoControllers/controllers/MainController.js index c9c53a7d06..10de084ee0 100644 --- a/html5/verto/verto_communicator/src/vertoControllers/controllers/MainController.js +++ b/html5/verto/verto_communicator/src/vertoControllers/controllers/MainController.js @@ -88,6 +88,10 @@ var disconnectCallback = function(v, connected) { console.debug('Redirecting to login page.'); storage.reset(); + if (typeof gapi !== 'undefined'){ + console.debug(gapi); + gapi.auth.signOut(); + } $location.path('/login'); }; @@ -275,6 +279,40 @@ }); + $scope.$on('event:google-plus-signin-success', function (event,authResult) { + // Send login to server or save into cookie + console.log('Google+ Login Success'); + console.log(authResult); + gapi.client.load('plus', 'v1', gapiClientLoaded); + }); + + function gapiClientLoaded() { + gapi.client.plus.people.get({userId: 'me'}).execute(handleEmailResponse); + } + + function handleEmailResponse(resp){ + var primaryEmail; + for (var i=0; i < resp.emails.length; i++) { + if (resp.emails[i].type === 'account') primaryEmail = resp.emails[i].value; + } + console.debug("Primary Email: " + primaryEmail ); + console.debug("display name: " + resp.displayName); + console.debug("imageurl: " + resp.image.url); + console.debug(resp); + console.debug(verto.data); + verto.data.email = primaryEmail; + verto.data.name = resp.displayName; + storage.data.name = verto.data.name; + storage.data.email = verto.data.email; + + $scope.login(); + } + + $scope.$on('event:google-plus-signin-failure', function (event,authResult) { + // Auth failure or signout detected + console.log('Google+ Login Failure'); + }); + $rootScope.callActive = function(data) { verto.data.mutedMic = storage.data.mutedMic; verto.data.mutedVideo = storage.data.mutedVideo;