Skip to content
This repository was archived by the owner on Mar 6, 2025. It is now read-only.

Commit

Permalink
Merge pull request #24 from aroskanalen/feature/fix-auth-error
Browse files Browse the repository at this point in the history
Bugfix: Changed authentication flow for search
  • Loading branch information
tuj authored Mar 22, 2020
2 parents d9cd609 + 124d7df commit 27c9a97
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 52 deletions.
150 changes: 99 additions & 51 deletions Resources/public/apps/mainModule/services/searchService.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,33 @@ angular.module('mainModule').service('searchService', ['$q', '$http', 'busServic
function ($q, $http, busService) {
'use strict';

var socket;
var token = null;
var socket = null;

function getAuth(reauth) {
var deferred = $q.defer();

var url = 'api/auth/search' + (reauth ? '/reauth' : '');

$http.get(url)
.success(function (data) {
deferred.resolve(data.token);
})
.error(function (data, status) {
deferred.reject(status);
});

return deferred.promise;
}

/**
* Connect to the web-socket.
*
* @param deferred
* The is a deferred object that should be resolved on connection.
* @param token
* The connection token.
*/
function getSocket(deferred) {
function getSocket(token) {
var deferred = $q.defer();

// Get connected to the server.
socket = io.connect(window.config.search.address, {
'query': 'token=' + token,
Expand All @@ -27,21 +44,30 @@ angular.module('mainModule').service('searchService', ['$q', '$http', 'busServic
// Handle error events.
socket.on('error', function (reason) {
if (reason === 'Not authorized') {
// Try reauth
$http.get('api/auth/search/reauth')
.success(function (data) {
token = data.token;
getSocket(deferred);
})
.error(function (data, status) {
getAuth(true).then(
function success(token) {
getSocket(token).then(
function success(socket) {
deferred.resolve(socket);
},
function error(reason) {
busService.$emit('log.error', {
'cause': reason,
'msg': 'Search socket error.'
});
deferred.reject(reason);
}
);
},
function error(reason) {
busService.$emit('log.error', {
'cause': status,
'msg': 'Search socket error. Could not reauthorize.'
'cause': reason,
'msg': 'Search socket error.'
});
deferred.reject(status);
});
}
else {
deferred.reject(reason);
}
);
} else {
busService.$emit('log.error', {
'cause': reason,
'msg': 'Search socket error.'
Expand All @@ -51,7 +77,7 @@ angular.module('mainModule').service('searchService', ['$q', '$http', 'busServic
});

socket.on('connect', function () {
deferred.resolve('Connected to the server.');
deferred.resolve(socket);
});

// Handle disconnect event (fires when disconnected or connection fails).
Expand All @@ -61,6 +87,8 @@ angular.module('mainModule').service('searchService', ['$q', '$http', 'busServic
// request will be queued and send all at once... which could give some
// strange side effects in the application if not handled.
});

return deferred.promise;
}

/**
Expand All @@ -73,27 +101,39 @@ angular.module('mainModule').service('searchService', ['$q', '$http', 'busServic
// Try to connect to the server if not already connected.
var deferred = $q.defer();

if (socket === undefined) {
if (token !== null) {
getSocket(deferred);
}
else {
$http.get('api/auth/search')
.success(function (data) {
token = data.token;
getSocket(deferred);
})
.error(function (data, status) {
busService.$emit('log.error', {
'cause': status,
'msg': 'Authentication (search) to search node failed (' + status + ')'
});
deferred.reject(status);
});
}
if (socket === null) {
getAuth().then(
function success(token) {
getSocket(token).then(
function success(socket) {
deferred.resolve(socket);
},
function error() {
deferred.reject('Error connecting to search service.');
}
);
},
function error() {
getAuth(true).then(
function success(token) {
getSocket(token).then(
function success(socket) {
deferred.resolve(socket);
},
function error() {
deferred.reject('Error connecting to search service.');
}
);
},
function error() {
deferred.reject('Error re-authenticating to search service.');
}
);
}
);
}
else {
deferred.resolve('Connected to the server.');
deferred.resolve(socket);
}

return deferred.promise;
Expand Down Expand Up @@ -165,23 +205,31 @@ angular.module('mainModule').service('searchService', ['$q', '$http', 'busServic
'error': 'error-' + query.uuid
};

connect().then(function () {
socket.once(query.callbacks.hits, function (hits) {
busService.$emit(message.callbacks.hits, hits);
});
connect().then(
function success(socket) {
socket.once(query.callbacks.hits, function (hits) {
busService.$emit(message.callbacks.hits, hits);
});

// Catch search errors.
socket.once(query.callbacks.error, function (error) {
busService.$emit('log.error', {
'cause': error.message,
'msg': 'Search error.'
});

// Catch search errors.
socket.once(query.callbacks.error, function (error) {
busService.$emit(message.callbacks.error, error.message);
});

socket.emit('search', query);
},
function error() {
busService.$emit('log.error', {
'cause': error.message,
'msg': 'Search error.'
});

busService.$emit(message.callbacks.error, error.message);
});

socket.emit('search', query);
});
}
);
});
}
]);
]);
2 changes: 1 addition & 1 deletion Resources/public/assets/build/os2displayadmin.min.js

Large diffs are not rendered by default.

0 comments on commit 27c9a97

Please sign in to comment.