Merge "[CORD-1504] Handling XOSPermissionDenied errors"
diff --git a/src/app/core/field/field.html b/src/app/core/field/field.html
index e472939..9baa1d5 100644
--- a/src/app/core/field/field.html
+++ b/src/app/core/field/field.html
@@ -1,4 +1,7 @@
-<label ng-if="vm.field.type !== 'object' && vm.field.type !== 'array'">{{vm.field.label}}</label>
+<label ng-if="vm.field.type !== 'object' && vm.field.type !== 'array'">
+    {{vm.field.label}}
+    <span class="required" ng-if="vm.field.validators.required">*</span>
+</label>
 <input
         xos-custom-validator custom-validator="vm.field.validators.custom || null"
         ng-if="vm.field.type !== 'boolean' && vm.field.type !== 'object' && vm.field.type !== 'select' && vm.field.type !== 'array'"
diff --git a/src/app/core/field/field.scss b/src/app/core/field/field.scss
new file mode 100644
index 0000000..d15f359
--- /dev/null
+++ b/src/app/core/field/field.scss
@@ -0,0 +1,5 @@
+@import "../../style/vars";
+
+span.required {
+  color: $color-accent;
+}
\ No newline at end of file
diff --git a/src/app/core/field/field.ts b/src/app/core/field/field.ts
index ad36473..5c5b48a 100644
--- a/src/app/core/field/field.ts
+++ b/src/app/core/field/field.ts
@@ -1,3 +1,4 @@
+import './field.scss';
 import {IXosConfigHelpersService} from '../services/helpers/config.helpers';
 import {IXosFormHelpersService} from '../form/form-helpers';
 import * as _ from 'lodash';
diff --git a/src/app/core/form/form.html b/src/app/core/form/form.html
index 5da8c4e..4476741 100644
--- a/src/app/core/form/form.html
+++ b/src/app/core/form/form.html
@@ -21,4 +21,7 @@
             {{action.label}}
         </button>
     </div>
+    <div class="form-group">
+        Fields marked with <span class="required">*</span> are <span class="required">required</span> fields.
+    </div>
 </form>
diff --git a/src/app/core/form/form.spec.ts b/src/app/core/form/form.spec.ts
index c5244e0..6b2a196 100644
--- a/src/app/core/form/form.spec.ts
+++ b/src/app/core/form/form.spec.ts
@@ -96,7 +96,9 @@
           name: 'email',
           label: 'Mail:',
           type: 'email',
-          validators: {}
+          validators: {
+            required: true
+          }
         },
         {
           name: 'birthDate',
@@ -170,9 +172,16 @@
 
     // TODO move in xosField test
     it('should set a custom label', () => {
-      let nameField = element[0].getElementsByClassName('form-group')[0];
+      let nameField = element[0].getElementsByClassName('form-group')[1];
       let label = angular.element(nameField.getElementsByTagName('label')[0]).text();
-      expect(label).toEqual('Id:');
+      expect(label).toContain('Name:');
+      expect(label).not.toContain('*');
+    });
+
+    it('should print an * for required fields', () => {
+      let nameField = element[0].getElementsByClassName('form-group')[2];
+      let label = angular.element(nameField.getElementsByTagName('label')[0]).text();
+      expect(label).toContain('*');
     });
 
     // TODO move test in xos-field
diff --git a/src/app/core/login/login.ts b/src/app/core/login/login.ts
index 8aa40d5..d47f265 100644
--- a/src/app/core/login/login.ts
+++ b/src/app/core/login/login.ts
@@ -43,7 +43,12 @@
       })
       .catch(e => {
         this.$log.error(`[XosLogin] Error during login.`, e);
-        this.errorMsg = `Something went wrong, please try again.`;
+        if (e.error === 'XOSNotAuthenticated') {
+          this.errorMsg = `This combination of username/password cannot be authenticated`;
+        }
+        else {
+          this.errorMsg = `Something went wrong, please try again.`;
+        }
         this.showErrorMsg = true;
       });
   }