Fix local signup, style header

This commit is contained in:
Christian Cueni 2020-02-11 14:36:48 +01:00
parent b36ba5f9a1
commit 0922c5d198
14 changed files with 201 additions and 31 deletions

View File

@ -2460,7 +2460,7 @@
}, },
"chalk": { "chalk": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -2492,7 +2492,7 @@
}, },
"onetime": { "onetime": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
"dev": true "dev": true
}, },
@ -11540,7 +11540,8 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
@ -11582,7 +11583,8 @@
"code-point-at": { "code-point-at": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
@ -11593,7 +11595,8 @@
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
@ -11710,7 +11713,8 @@
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
@ -11722,6 +11726,7 @@
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
@ -11736,6 +11741,7 @@
"version": "3.0.4", "version": "3.0.4",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
@ -11743,12 +11749,14 @@
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"minipass": { "minipass": {
"version": "2.3.5", "version": "2.3.5",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"safe-buffer": "^5.1.2", "safe-buffer": "^5.1.2",
"yallist": "^3.0.0" "yallist": "^3.0.0"
@ -11767,6 +11775,7 @@
"version": "0.5.1", "version": "0.5.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
@ -11847,7 +11856,8 @@
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
@ -11859,6 +11869,7 @@
"version": "1.4.0", "version": "1.4.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
@ -11944,7 +11955,8 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
@ -11980,6 +11992,7 @@
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
@ -11999,6 +12012,7 @@
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
@ -12042,12 +12056,14 @@
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"yallist": { "yallist": {
"version": "3.0.3", "version": "3.0.3",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
} }
} }
}, },
@ -13198,7 +13214,7 @@
}, },
"chalk": { "chalk": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -13245,13 +13261,13 @@
}, },
"onetime": { "onetime": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
"dev": true "dev": true
}, },
"ora": { "ora": {
"version": "0.2.3", "version": "0.2.3",
"resolved": "http://registry.npmjs.org/ora/-/ora-0.2.3.tgz", "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz",
"integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -13309,7 +13325,7 @@
}, },
"chalk": { "chalk": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -13373,7 +13389,7 @@
}, },
"chalk": { "chalk": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true, "dev": true,
"requires": { "requires": {
@ -13405,7 +13421,7 @@
}, },
"onetime": { "onetime": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
"dev": true "dev": true
}, },
@ -13675,7 +13691,7 @@
}, },
"onetime": { "onetime": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
"dev": true "dev": true
}, },

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="hello public-page"> <div class="hello public-page">
<h1 class="hello__title public-page__title">Wollen sie mySkillbox jetzt im Unterricht verwenden</h1> <h1 class="hello__title public-page__title">Wollen sie mySkillbox jetzt im Unterricht verwenden?</h1>
<form class="hello__form hello-form" novalidate @submit.prevent="validateBeforeSubmit"> <form class="hello__form hello-form" novalidate @submit.prevent="validateBeforeSubmit">
<div class="hello-form__field skillboxform-input"> <div class="hello-form__field skillboxform-input">
<label for="email" class="skillboxform-input__label">E-Mail</label> <label for="email" class="skillboxform-input__label">E-Mail</label>
@ -15,6 +15,7 @@
class="change-form__email skillbox-input skillboxform-input__input" class="change-form__email skillbox-input skillboxform-input__input"
autocomplete="off" autocomplete="off"
data-cy="email-input" data-cy="email-input"
placeholder="E-Mail eingeben"
tabindex="0" tabindex="0"
/> />
<small <small

View File

@ -0,0 +1,126 @@
<template>
<div class="license-activation public-page">
<header class="info-header">
<p class="info-header__text small-emph">Für <span class="info-header__emph">{{me.email}}</span> haben wir keine gültige Lizenz gefunden</p>
</header>
<section class="coupon">
<form class="license-activation__form license-activation-form" novalidate @submit.prevent="validateBeforeSubmit">
<h2>Geben Sie einen Coupon-Code ein</h2>
<div class="change-form__field skillboxform-input">
<label for="coupon" class="skillboxform-input__label">Coupon-Code</label>
<input
id="coupon"
name="coupon"
type="coupon"
data-vv-as="Passwort"
v-model="coupon"
v-validate="'required'"
:class="{ 'skillboxform-input__input--error': errors.has('coupon') }"
class="change-form__new skillbox-input skillboxform-input__input"
autocomplete="off"
data-cy="coupon-input"
tabindex="0"
/>
<small
v-if="errors.has('coupon') && submitted"
class="skillboxform-input__error"
data-cy="coupon-local-errors"
>{{ errors.first('coupon') }}</small>
<small
v-for="error in couponErrors"
:key="error"
class="skillboxform-input__error"
data-cy="coupon-remote-errors"
>{{ error }}</small>
</div>
<div class="skillboxform-input">
<small class="skillboxform-input__error" data-cy="coupon-error" v-if="loginError">{{couponError}}</small>
</div>
<div class="actions">
<button class="button button--primary button--big actions__submit" data-cy="coupon-button">Coupon abschicken</button>
</div>
</form>
</section>
<section class="get-license">
<h2>Oder, kaufen Sie eine Lizenz</h2>
<ul>
<li><a href="https://www.hep-verlag.ch">mySkillobx für Lehrpersonen</a></li>
<li><a href="https://www.hep-verlag.ch">mySkillobx für Lernende</a></li>
</ul>
</section>
</div>
</template>
<script>
import ME_QUERY from '@/graphql/gql/meQuery.gql';
import {login} from '../hep-client/index';
export default {
components: {},
methods: {
validateBeforeSubmit() {
// this.$validator.validate().then(result => {
// this.submitted = true;
// let that = this;
// if (result) {
// login(this.password)
// .then((response) => {
// console.log(response)
// })
// .catch((error) => {
// console.log(error)
// this.registrationError = 'Es ist ein Fehler aufgetreten. Bitte versuchen Sie es nochmals.';
// });
// }
// });
},
resetForm() {
this.coupon = '';
this.submitted = false;
this.$validator.reset();
}
},
data() {
return {
coupon: '',
couponErrors: [],
loginError: '',
submitted: false
};
},
apollo: {
me: {
query: ME_QUERY,
},
},
};
</script>
<style scoped lang="scss">
@import "@/styles/_variables.scss";
@import "@/styles/_mixins.scss";
.text-link {
font-family: $sans-serif-font-family;
color: $color-brand;
}
.actions {
&__reset {
display: inline-block;
margin-left: $large-spacing;
}
}
.get-license {
margin-top: $large-spacing
}
</style>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="login public-page"> <div class="login public-page">
<header> <header class="info-header">
<p>Super wir haben für {{helloEmail.email}} ein Hep Konto gefunden</p> <p class="info-header__text small-emph">Super wir haben für <span class="info-header__emph">{{helloEmail.email}}</span> ein Hep Konto gefunden</p>
<h1 class="login__title public-page__title">Bitte geben Sie das passende Passwort ein</h1> <h1 class="login__title public-page__title">Bitte geben Sie das passende Passwort ein</h1>
</header> </header>
<form class="login__form login-form" novalidate @submit.prevent="validateBeforeSubmit"> <form class="login__form login-form" novalidate @submit.prevent="validateBeforeSubmit">

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="registration public-page"> <div class="registration public-page">
<header> <header class="info-header">
<p>Für {{helloEmail.email}} haben wir kein Hep Konto gefunden.</p> <p class="info-header__text small-emph">Für <span class="info-header__emph">{{helloEmail.email}}</span> haben wir kein Hep Konto gefunden.</p>
<h1 class="registration__title public-page__title">Damit Sie mySkillbox verwenden können, müssen Sie ein Konto erstellen.</h1> <h1 class="registration__title public-page__title">Damit Sie mySkillbox verwenden können, müssen Sie ein Konto erstellen.</h1>
</header> </header>
<form class="registration__form registration-form" novalidate @submit.prevent="validateBeforeSubmit"> <form class="registration__form registration-form" novalidate @submit.prevent="validateBeforeSubmit">

View File

@ -34,6 +34,7 @@ import registration from '@/pages/registration'
import waitForClass from '@/pages/waitForClass' import waitForClass from '@/pages/waitForClass'
import checkEmail from '@/pages/check-email' import checkEmail from '@/pages/check-email'
import emailVerification from '@/pages/email-verification' import emailVerification from '@/pages/email-verification'
import licenseActivation from '@/pages/license-activation'
import store from '@/store/index'; import store from '@/store/index';
@ -174,6 +175,14 @@ const routes = [
layout: 'public' layout: 'public'
} }
}, },
{
path: '/license-activation',
component: licenseActivation,
name: 'licenseActivation',
meta: {
layout: 'public'
}
},
{path: '/styleguide', component: styleGuidePage}, {path: '/styleguide', component: styleGuidePage},
{path: '*', component: p404} {path: '*', component: p404}
]; ];

View File

@ -0,0 +1,13 @@
.info-header {
margin-top: $large-spacing;
margin-bottom: $large-spacing;
&__text {
font-family: $sans-serif-font-family;
}
&__emph {
color: $color-brand;
font-weight: 600;
}
}

View File

@ -6,6 +6,7 @@
&__label { &__label {
margin-bottom: 10px; margin-bottom: 10px;
display: inline-block; display: inline-block;
font-weight: 600;
} }
&__input { &__input {

View File

@ -22,3 +22,5 @@
@import "public-page"; @import "public-page";
@import "student-submission"; @import "student-submission";
@import "module-activity"; @import "module-activity";
@import "info_header";

View File

@ -8,5 +8,5 @@ module.exports = {
` `
} }
} }
} },
}; };

View File

@ -369,7 +369,8 @@ TASKBASE_SUPERPASSWORD = os.environ.get("TASKBASE_SUPERPASSWORD")
TASKBASE_BASEURL = os.environ.get("TASKBASE_BASEURL") TASKBASE_BASEURL = os.environ.get("TASKBASE_BASEURL")
USE_LOCAL_REGISTRATION = False USE_LOCAL_REGISTRATION = True
# HEP # HEP
HEP_ADMIN_USER = "adminuser" HEP_ADMIN_USER = "adminuser"

View File

@ -10,7 +10,7 @@
from django.conf import settings from django.conf import settings
from django.core.management import BaseCommand from django.core.management import BaseCommand
from registration.models import LicenseType # from registration.models import LicenseType
from users.models import Role from users.models import Role
@ -23,8 +23,8 @@ class Command(BaseCommand):
except Role.DoesNotExist: except Role.DoesNotExist:
print("LicenseType requires that a Teacher Role exsits") print("LicenseType requires that a Teacher Role exsits")
LicenseType.objects.create(name='dummy_license', # LicenseType.objects.create(name='dummy_license',
for_role=role, # for_role=role,
active=True, # active=True,
key='c1fa2e2a-2e27-480d-8469-2e88414c4ad8', # key='c1fa2e2a-2e27-480d-8469-2e88414c4ad8',
description='dummy license') # description='dummy license')

View File

@ -40,6 +40,7 @@ class Login(relay.ClientIDMutation):
user = authenticate(username=username, password=password) user = authenticate(username=username, password=password)
if user is None: if user is None:
return cls.return_login_message('invalid_credentials') return cls.return_login_message('invalid_credentials')
login(info.context, user)
else: else:
hep_client = HepClient() hep_client = HepClient()