title: Use the function form of "use strict". angularjs authentication (with scala, play framework)
body: <p>I'm trying to implement an example of authentication in my play application (with scala). I'm following this <a href="http://jasonwatmore.com/post/2014/05/26/AngularJS-Basic-HTTP-Authentication-Example.aspx" rel="nofollow">tutorial</a></p>
  
  <p>So in the views folder I created the index page for authentication. and added this:</p>
  
  <pre><code>'use strict';
  
  angular.module('Authentication')
  
  
      .controller('LoginController',
          ['$scope', '$rootScope', '$location', 'AuthenticationService',
          function ($scope, $rootScope, $location, AuthenticationService) {
              // reset login status
              AuthenticationService.ClearCredentials();
  
              $scope.login = function () {
                  $scope.dataLoading = true;
                  AuthenticationService.Login($scope.username, $scope.password, function(response) {
                      if(response.success) {
                          AuthenticationService.SetCredentials($scope.username, $scope.password);
                          $location.path('/');
                      } else {
                          $scope.error = response.message;
                          $scope.dataLoading = false;
                      }
                  });
              };
          }]);
  </code></pre>
  
  <p>and this:</p>
  
  <pre><code>'use strict';
  
  angular.module('Authentication')
  
  .factory('AuthenticationService',
      ['Base64', '$http', '$cookieStore', '$rootScope', '$timeout',
      function (Base64, $http, $cookieStore, $rootScope, $timeout) {
          var service = {};
  
          service.Login = function (username, password, callback) {
  
              /* Dummy authentication for testing, uses $timeout to simulate api call
               ----------------------------------------------*/
              $timeout(function(){
                  var response = { success: username === 'test' &amp;&amp; password === 'test' };
                  if(!response.success) {
                      response.message = 'Username or password is incorrect';
                  }
                  callback(response);
              }, 1000);
  
  
              /* Use this for real authentication
               ----------------------------------------------*/
              //$http.post('/api/authenticate', { username: username, password: password })
              //    .success(function (response) {
              //        callback(response);
              //    });
  
          };
  
          service.SetCredentials = function (username, password) {
              var authdata = Base64.encode(username + ':' + password);
  
              $rootScope.globals = {
                  currentUser: {
                      username: username,
                      authdata: authdata
                  }
              };
  
              $http.defaults.headers.common['Authorization'] = 'Basic ' + authdata; // jshint ignore:line
              $cookieStore.put('globals', $rootScope.globals);
          };
  
          service.ClearCredentials = function () {
              $rootScope.globals = {};
              $cookieStore.remove('globals');
              $http.defaults.headers.common.Authorization = 'Basic ';
          };
  
          return service;
      }])
  
  .factory('Base64', function () {
      /* jshint ignore:start */
  
      var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
  
      return {
          encode: function (input) {
              var output = "";
              var chr1, chr2, chr3 = "";
              var enc1, enc2, enc3, enc4 = "";
              var i = 0;
  
              do {
                  chr1 = input.charCodeAt(i++);
                  chr2 = input.charCodeAt(i++);
                  chr3 = input.charCodeAt(i++);
  
                  enc1 = chr1 &gt;&gt; 2;
                  enc2 = ((chr1 &amp; 3) &lt;&lt; 4) | (chr2 &gt;&gt; 4);
                  enc3 = ((chr2 &amp; 15) &lt;&lt; 2) | (chr3 &gt;&gt; 6);
                  enc4 = chr3 &amp; 63;
  
                  if (isNaN(chr2)) {
                      enc3 = enc4 = 64;
                  } else if (isNaN(chr3)) {
                      enc4 = 64;
                  }
  
                  output = output +
                      keyStr.charAt(enc1) +
                      keyStr.charAt(enc2) +
                      keyStr.charAt(enc3) +
                      keyStr.charAt(enc4);
                  chr1 = chr2 = chr3 = "";
                  enc1 = enc2 = enc3 = enc4 = "";
              } while (i &lt; input.length);
  
              return output;
          },
  
          decode: function (input) {
              var output = "";
              var chr1, chr2, chr3 = "";
              var enc1, enc2, enc3, enc4 = "";
              var i = 0;
  
              // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
              var base64test = /[^A-Za-z0-9\+\/\=]/g;
              if (base64test.exec(input)) {
                  window.alert("There were invalid base64 characters in the input text.\n" +
                      "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" +
                      "Expect errors in decoding.");
              }
              input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  
              do {
                  enc1 = keyStr.indexOf(input.charAt(i++));
                  enc2 = keyStr.indexOf(input.charAt(i++));
                  enc3 = keyStr.indexOf(input.charAt(i++));
                  enc4 = keyStr.indexOf(input.charAt(i++));
  
                  chr1 = (enc1 &lt;&lt; 2) | (enc2 &gt;&gt; 4);
                  chr2 = ((enc2 &amp; 15) &lt;&lt; 4) | (enc3 &gt;&gt; 2);
                  chr3 = ((enc3 &amp; 3) &lt;&lt; 6) | enc4;
  
                  output = output + String.fromCharCode(chr1);
  
                  if (enc3 != 64) {
                      output = output + String.fromCharCode(chr2);
                  }
                  if (enc4 != 64) {
                      output = output + String.fromCharCode(chr3);
                  }
  
                  chr1 = chr2 = chr3 = "";
                  enc1 = enc2 = enc3 = enc4 = "";
  
              } while (i &lt; input.length);
  
              return output;
          }
      };
  
      /* jshint ignore:end */
  });
  </code></pre>
  
  <p>and finaly this:</p>
  
  <pre><code>'use strict';
  
  // declare modules
  angular.module('Authentication', []);
  angular.module('Home', []);
  
  angular.module('BasicHttpAuthExample', [
      'Authentication',
      'Home',
      'ngRoute',
      'ngCookies'
  ])
  
  .config(['$routeProvider', function ($routeProvider) {
  
      $routeProvider
          .when('/login', {
              controller: 'LoginController',
              templateUrl: 'modules/authentication/views/login.html',
              hideMenus: true
          })
  
          .when('/', {
              controller: 'HomeController',
              templateUrl: 'modules/home/views/home.html'
          })
  
          .otherwise({ redirectTo: '/login' });
  }])
  
  .run(['$rootScope', '$location', '$cookieStore', '$http',
      function ($rootScope, $location, $cookieStore, $http) {
          // keep user logged in after page refresh
          $rootScope.globals = $cookieStore.get('globals') || {};
          if ($rootScope.globals.currentUser) {
              $http.defaults.headers.common['Authorization'] = 'Basic ' + $rootScope.globals.currentUser.authdata; // jshint ignore:line
          }
  
          $rootScope.$on('$locationChangeStart', function (event, next, current) {
              // redirect to login page if not logged in
              if ($location.path() !== '/login' &amp;&amp; !$rootScope.globals.currentUser) {
                  $location.path('/login');
              }
          });
      }]);
  </code></pre>
  
  <p>to assets/javascripts/app folder and reference them in my main with this:</p>
  
  <pre><code>    &lt;script src="@routes.Assets.versioned("javascripts/app/controllers.js")" type="text/javascript"&gt;&lt;/script&gt;
      &lt;script src="@routes.Assets.versioned("javascripts/app/services.js")" type="text/javascript"&gt;&lt;/script&gt;
      &lt;script src="@routes.Assets.versioned("javascripts/app/app.js")" type="text/javascript"&gt;&lt;/script&gt;
  </code></pre>
  
  <p>I'm new to all of this I don't know if did I miss something or something else.
  the error That I get is :</p>
  
  <pre><code>Use the function form of "use strict".
  </code></pre>