Commit 0286a493 authored by Björn Eyselein's avatar Björn Eyselein
Browse files

Update mit Datenschutzerklärung

parent d1b6d6c4
......@@ -28,6 +28,13 @@ class HomeController @Inject()(cc: ControllerComponents, protected val tableDefs
} yield Ok(views.html.index(user, courses, repeatCount, pwSet))
}
def acceptDPS: EssentialAction = futureWithUser { user =>
implicit request =>
tableDefs.futureUserAcceptedDps(user).map {
_ => Redirect(routes.HomeController.index())
}
}
def registerForCoursesForm: EssentialAction = futureWithUser { user =>
implicit request =>
tableDefs.futureAllCoursesWithRegisterState(user.username).map {
......
......@@ -9,7 +9,7 @@ import scala.collection.immutable
// User and password
final case class User(username: String, isAdmin: Boolean = false)
final case class User(username: String, hasAcceptedDataPrivacyStatement: Boolean = false, isAdmin: Boolean = false)
final case class UserPassword(username: String, pwHash: String)
......
......@@ -29,6 +29,11 @@ trait UserTableDefs extends HasDatabaseConfigProvider[JdbcProfile] {
def futureInsertUser(user: User): Future[Boolean] = db.run(usersTQ += user).transform(_ == 1, identity)
def futureUserAcceptedDps(user: User): Future[Boolean] = db.run(
usersTQ.filter(_.username === user.username).map(_.hasAcceptedDataPrivacyStatement).update(true)
).transform(_ == 1, identity)
def futurePwHashForUser(user: User): Future[Option[UserPassword]] = db.run(userPasswordsTQ.filter(_.username === user.username).result.headOption)
def futureSavePwHash(userPassword: UserPassword): Future[Boolean] = db.run(userPasswordsTQ += userPassword).transform(_ == 1, identity)
......@@ -42,9 +47,12 @@ trait UserTableDefs extends HasDatabaseConfigProvider[JdbcProfile] {
def username: Rep[String] = column[String](usernameName, O.PrimaryKey)
def hasAcceptedDataPrivacyStatement: Rep[Boolean] = column[Boolean]("accepted_dps")
def isAdmin: Rep[Boolean] = column[Boolean]("is_admin")
override def * : ProvenShape[User] = (username, isAdmin) <> (User.tupled, User.unapply)
override def * : ProvenShape[User] = (username, hasAcceptedDataPrivacyStatement, isAdmin) <> (User.tupled, User.unapply)
}
......
......@@ -21,6 +21,62 @@
<hr>
@if(!user.hasAcceptedDataPrivacyStatement) {
<div class="row">
<div class="col s12">
<div class="card @primaryColor">
<div class="card-content white-text">
<span class="card-title">Datenschutzerklärung und Einwilligung zur Datenerhebung</span>
<p>(Stand Dezember 2018)</p>
<br>
<p>Der Datenschutz ist der Universität Würzburg besonders wichtig, deshalb kommen wir unserer
Verpflichtung gemäß Art. 13 Abs. 1 der Datenschutzgrundverordnung gerne nach und geben Ihnen
folgende Informationen zur Erhebung Ihrer Daten.</p>
<p>Verantwortlicher für die Datenerhebung ist die Universität Würzburg, Sanderring 2,
97070 Würzburg, E-Mail: <a href="info@@uni-wuerzburg.de">info@@uni-wuerzburg.de</a>.
Für Fragen des Datenschutzes können Sie sich an den behördlichen Datenschutzbeauftragten der
Universität, Sanderring 2, 97070 Würzburg, E-Mail: <a href="datenschutz@@uni-wuerzburg.de">
datenschutz@@uni-wuerzburg.de</a> wenden.</p>
<br>
<p>
<span class="red-text">
Die erhobenen Daten werden ausschließlich zu Forschungszwecken innerhalb von WueKabel
genutzt</span>, hierzu sind wir nach Art. 6 Abs. 1 Buchst. a DSGVO berechtigt.</p>
<p class="red-text">
Die Daten werden zu Forschungszwecken für mind. 10 Jahre gespeichert und dann gelöscht.
Falls es in einzelnen Fällen nötig ist die Daten länger zu speichern, erfolgt dies in enger
Abstimmung mit dem behördlichen Datenschutzbeauftragten.</p>
<br>
<p><b>Weitere Informationen über Ihre Rechte bezüglich der DSGVO finden Sie hier:</b></p>
<br>
<p class="center-align"><a href="https://www.uni-wuerzburg.de/universitaet/datenschutzbeauftragter">
https://www.uni-wuerzburg.de/universitaet/datenschutzbeauftragter</a></p>
<br>
<p>Mit dem Bestätigen der Einverständniserklärung erklären Sie, dass Sie die Datenschutzerklärung zur Kenntnis genommen haben und damit Einverstanden sind.</p>
</div>
<div class="card-action">
<a href="@routes.HomeController.acceptDPS()">Akzeptieren</a>
</div>
</div>
</div>
</div>
<hr>
}
<div class="row">
<div class="col s12">
<div class="card @primaryColor">
......@@ -47,14 +103,14 @@
<hr>
@if(!pwSet) {
<divs class="row">
<div class="row">
<div class="col s12">
<div class="card-panel red white-text">
Sie haben noch kein Passwort für diese Anwendung eingerichtet. Sie können Sie weiterhin nutzen, sich aber nur über WueCampus einloggen.
Sie können <a href="@routes.LoginController.changePwForm">hier</a> ein Passwort vergeben.
</div>
</div>
</divs>
</div>
<hr>
}
......
......@@ -3,8 +3,9 @@
-- Users
create table if not exists users (
username varchar(50) primary key,
is_admin boolean not null default false
username varchar(50) primary key,
accepted_dps boolean not null default false,
is_admin boolean not null default false
);
-- User passwords
......@@ -68,9 +69,9 @@ create table if not exists flashcards (
coll_id int,
course_id int,
card_type enum ('Word', 'Text', 'Blank', 'Choice') not null default 'Word',
front text not null,
front text not null,
front_hint text,
back text not null,
back text not null,
back_hint text,
primary key (id, coll_id, course_id),
......
# --- !Ups
insert into users (username, is_admin)
values ('first_user', true),
('second_user', true),
('third_user', true);
insert into users (username, accepted_dps, is_admin)
values ('first_user', false, true),
('second_user', false, true),
('third_user', false, true);
insert into user_passwords (username, password_hash)
values ('first_user', '$2a$10$6loikDKMzBkdP1HG33BeheyhF7e1.gNBx3mM1CiePRg2AaicJmj5.'),
......
......@@ -18,6 +18,8 @@ GET /logout
GET /user controllers.HomeController.userPage
GET /acceptDPS controllers.HomeController.acceptDPS
GET /changePwForm controllers.LoginController.changePwForm
POST /changePw controllers.LoginController.changePw
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment