<html><head><style>body{font-family:Helvetica,Arial;font-size:13px}</style></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">Hi, Kevin</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;">I replied to batch mail, so this one went out of context.</div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><span style="font-family: helvetica, arial;">--&nbsp;</span></div><div id="bloop_sign_1444013351554563072" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">Tair Sabirgaliev</div><div style="font-family:helvetica,arial;font-size:13px">Bee Software, LLP</div></div> <br><p class="airmail_on">On October 5, 2015 at 08:43:11, Tair Sabirgaliev (<a href="mailto:tair.sabirgaliev@bee.kz">tair.sabirgaliev@bee.kz</a>) wrote:</p> <blockquote type="cite" class="clean_bq"><span><div><div></div><div>&nbsp;
<br>Here is what we did for angular 1.4 :
<br>
<br>"use strict";
<br>
<br>var module = angular.module('hello.world', ['ngRoute', 'ngResource']);
<br>
<br>var auth = {};
<br>var logout = function(){
<br>&nbsp; &nbsp; console.log('*** LOGOUT');
<br>&nbsp; &nbsp; auth.loggedIn = false;
<br>&nbsp; &nbsp; auth.authz = null;
<br>&nbsp; &nbsp; window.location = auth.logoutUrl;
<br>};
<br>
<br>angular.element(document).ready(["$http", function ($http) {
<br>
<br>&nbsp; &nbsp; var keycloakAuth = new Keycloak('js/keycloak.json');
<br>&nbsp; &nbsp; auth.loggedIn = false;
<br>
<br>
<br>&nbsp; &nbsp; keycloakAuth.init({ onLoad: 'login-required' }).success(function () {
<br>&nbsp; &nbsp; &nbsp; &nbsp; auth.loggedIn = true;
<br>&nbsp; &nbsp; &nbsp; &nbsp; auth.authz = keycloakAuth;
<br>&nbsp; &nbsp; &nbsp; &nbsp; auth.logoutUrl = keycloakAuth.authServerUrl + "/realms/demo/tokens/logout?redirect_uri=http://localhost:9080/hello-world/";
<br>&nbsp; &nbsp; &nbsp; &nbsp; module.factory('Auth', function() {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return auth;
<br>&nbsp; &nbsp; &nbsp; &nbsp; });
<br>&nbsp; &nbsp; &nbsp; &nbsp; angular.bootstrap(document, ["hello.world"]);
<br>
<br>&nbsp; &nbsp; }).error(function () {
<br>&nbsp; &nbsp; &nbsp; &nbsp; window.location.reload();
<br>&nbsp; &nbsp; });
<br>
<br>}]);
<br>
<br>module.factory('authInterceptor', ["$q", "Auth", function($q, Auth) {
<br>&nbsp; &nbsp; return {
<br>&nbsp; &nbsp; &nbsp; &nbsp; 'request': function (config) {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var deferred = $q.defer();
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Auth.authz.token) {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Auth.authz.updateToken(5).success(function() {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; config.headers = config.headers || {};
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; config.headers.Authorization = 'Bearer ' + Auth.authz.token;
<br>
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; deferred.resolve(config);
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }).error(function() {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; deferred.reject('Failed to refresh token');
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return deferred.promise;
<br>&nbsp; &nbsp; &nbsp; &nbsp; },
<br>&nbsp; &nbsp; &nbsp; &nbsp; 'requestError': function(rejection) {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return $q.reject(rejection);
<br>&nbsp; &nbsp; &nbsp; &nbsp; },
<br>
<br>&nbsp; &nbsp; &nbsp; &nbsp; 'response': function(response) {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return response;
<br>&nbsp; &nbsp; &nbsp; &nbsp; },
<br>
<br>&nbsp; &nbsp; &nbsp; &nbsp; 'responseError': function(response) {
<br>
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (response.status == 401) {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log('session timeout?');
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; logout();
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else if (response.status == 403) {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert("Forbidden");
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else if (response.status == 404) {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert("Not found");
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else if (response.status) {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log(response.status);
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (response.data &amp;&amp; response.data.errorMessage) {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert(response.data.errorMessage);
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert("An unexpected server error has occurred");
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else if (response === 'Failed to refresh token') {
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; logout();
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }
<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return $q.reject(response);
<br>&nbsp; &nbsp; &nbsp; &nbsp; }
<br>&nbsp; &nbsp; };
<br>}]);
<br>
<br>module.config(['$httpProvider', function($httpProvider) {
<br>&nbsp; &nbsp; $httpProvider.interceptors.push('authInterceptor');
<br>}]);
<br>
<br>
<br>--   
<br>Tair Sabirgaliev   
<br>Bee Software, LLP
<br>
<br>
<br>
<br>On October 5, 2015 at 02:57:31, keycloak-user-request@lists.jboss.org (keycloak-user-request@lists.jboss.org(mailto:keycloak-user-request@lists.jboss.org)) wrote:
<br>
<br>&gt; Date: Sat, 3 Oct 2015 20:17:04 +0200(http://airmail.calendar/2015-10-04%2000:17:04%20GMT+6)   
<br>&gt; From: "Kevin Hirschmann"   
<br>&gt; Subject: [keycloak-user] angularjs example for 1.4   
<br>&gt; To: "'keycloak-user'"   
<br>&gt; Message-ID: &lt;00cd01d0fe07$b4ab5d60$1e021820$@huebinet.de(mailto:00cd01d0fe07$b4ab5d60$1e021820$@huebinet.de)&gt;   
<br>&gt; Content-Type: text/plain; charset="iso-8859-1"   
<br>&gt;   
<br>&gt; Hello,   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt; I am trying to use the example provided here   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt; https://github.com/keycloak/keycloak/tree/master/examples/demo-template/angu   
<br>&gt; lar-product-app   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt; to connect from an angularjs client to a REST Endpoint. Both frontend and   
<br>&gt; backend are protected by keycloak.   
<br>&gt;   
<br>&gt; My problem is, that the example provided by the link above uses angularjs   
<br>&gt; 1.2 and doesn?t work with newer versions.   
<br>&gt;   
<br>&gt; (see   
<br>&gt; http://stackoverflow.com/questions/28212837/keycloak-unknown-provider-error)   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt; Has anyone on the mailing list been able to adapt the example to angular   
<br>&gt; 1.4? What steps are necessary?   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt; Kind Regards   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt; Kevin Hirschmann   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt; HUEBINET Informationsmanagement GmbH &amp; Co. KG   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt; Der Nachrichtenaustausch mit HUEBINET Informationsmanagement GmbH &amp; Co. KG,   
<br>&gt; Koblenz via E-Mail dient lediglich zu Informationszwecken.   
<br>&gt; Rechtsgesch?ftliche Erkl?rungen mit verbindlichem Inhalt k?nnen ?ber dieses   
<br>&gt; Medium nicht ausgetauscht werden, da die Manipulation von E-Mails durch   
<br>&gt; Dritte nicht ausgeschlossen werden kann.   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt; Email communication with HUEBINET Informationsmanagement GmbH &amp; Co. KG is   
<br>&gt; only intended to provide information of a general kind, and shall not be   
<br>&gt; used for any statement with binding contents in respect to legal relations.   
<br>&gt; It is not totally possible to prevent a third party from manipulating emails   
<br>&gt; and email contents.   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>&gt;   
<br>
<br></div></div></span></blockquote></body></html>