Skip to content

Commit 6e916c9

Browse files
authored
Merge pull request #33 from ls1intum/english-imprint-privacy
Add english imprint and privacy statement
2 parents 1467c4a + c7b18d8 commit 6e916c9

File tree

11 files changed

+325
-8
lines changed

11 files changed

+325
-8
lines changed

chatbot-ui/src/app/app.routes.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,17 @@ import { AuthGuard } from './utils/auth.guard';
55
import { ImprintComponent } from './imprint/imprint.component';
66
import { PrivacyComponent } from './privacy/privacy.component';
77
import { RedirectComponent } from './utils/redirect.component';
8+
import { PrivacyEnComponent } from './privacy_en/privacy.component';
9+
import { ImprintEnComponent } from './imprint_en/imprint.component';
810

911
export const routes: Routes = [
1012
{ path: 'login', component: LoginComponent },
1113
{ path: 'en', component: ChatComponent, canActivate: [AuthGuard], data: { language: 'en' } },
1214
{ path: 'de', component: ChatComponent, canActivate: [AuthGuard], data: { language: 'de' } },
13-
{ path: 'imprint', component: ImprintComponent, },
14-
{ path: 'privacy', component: PrivacyComponent },
15+
{ path: 'imprint', component: ImprintEnComponent, },
16+
{ path: 'impressum', component: ImprintComponent, },
17+
{ path: 'datenschutz', component: PrivacyComponent },
18+
{ path: 'privacy', component: PrivacyEnComponent },
1519
{ path: '', component: RedirectComponent },
1620
{ path: '**', redirectTo: '' }
1721
];

chatbot-ui/src/app/chat/chat.component.html

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,8 @@
8282
</div>
8383
<div>
8484
<ng-container *ngIf="isLargeScreen">
85-
<a href="#" (click)="onClickDatenschutz(); $event.preventDefault()">Datenschutz</a>
86-
&nbsp;|&nbsp;
87-
<a href="#" (click)="onClickImpressum(); $event.preventDefault()">Impressum</a>
85+
<a [routerLink]="language === 'en' ? '/privacy' : '/datenschutz'">{{ language === 'en' ? 'Privacy' : 'Datenschutz' }}</a>&nbsp;|&nbsp;
86+
<a [routerLink]="language === 'en' ? '/imprint' : '/impressum'">{{ language === 'en' ? 'Imprint' : 'Impressum' }}</a>
8887
</ng-container>
8988
</div>
9089
</div>

chatbot-ui/src/app/chat/chat.component.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Component, ElementRef, ViewChild, OnInit, ViewChildren, QueryList, Afte
33
import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
44
import { ChatbotService } from '../services/chatbot.service';
55
import { NgSelectModule } from '@ng-select/ng-select';
6-
import { ActivatedRoute, Router } from '@angular/router';
6+
import { ActivatedRoute, Router, RouterModule } from '@angular/router';
77
import { ErrorSnackbarComponent } from '../utils/error-snackbar/error-snackbar.component';
88
import { StudyProgramService } from '../services/study-program.service';
99
import { StudyProgram } from '../data/study-program';
@@ -50,6 +50,7 @@ export const MESSAGES = {
5050
standalone: true,
5151
imports: [
5252
CommonModule,
53+
RouterModule,
5354
FormsModule,
5455
NgSelectModule,
5556
ReactiveFormsModule,
@@ -333,10 +334,17 @@ export class ChatComponent implements OnInit, AfterViewChecked {
333334
* Privacy and imprint
334335
*/
335336
onClickDatenschutz() {
336-
this.router.navigate(['/privacy']);
337+
this.router.navigate(['/datenschutz']);
338+
/*} else {
339+
this.router.navigate(['/datenschutz']);
340+
}*/
337341
}
338342

339343
onClickImpressum() {
340-
this.router.navigate(['/imprint']);
344+
if (this.language === "en") {
345+
this.router.navigate(['/imprint']);
346+
} else {
347+
this.router.navigate(['/impressum']);
348+
}
341349
}
342350
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<app-header></app-header>
2+
3+
<div class="imprint-wrapper">
4+
<h1>Imprint</h1>
5+
6+
<section>
7+
<h2>Publisher</h2>
8+
<p>
9+
Technical University of Munich<br />
10+
Arcisstraße&nbsp;21<br />
11+
80333&nbsp;München<br />
12+
Telephone: +49&nbsp;(0)89&nbsp;289-01<br />
13+
Fax: +49&nbsp;(0)89&nbsp;289-22000<br />
14+
Email: poststelle(at)tum.de
15+
</p>
16+
</section>
17+
18+
<section>
19+
<h2>Authorized to represent</h2>
20+
<p>
21+
The Technical University of Munich is legally represented by the President Prof.&nbsp;Dr.&nbsp;Thomas&nbsp;F.&nbsp;Hofmann.
22+
</p>
23+
</section>
24+
25+
<section>
26+
<h2>VAT identification number</h2>
27+
<p>DE811193231 (in accordance with § 27a of the German VAT tax act - UStG)</p>
28+
</section>
29+
30+
<section>
31+
<h2>Responsible for content</h2>
32+
<p>
33+
Prof.&nbsp;Dr.&nbsp;Stephan&nbsp;Krusche<br />
34+
Boltzmannstraße&nbsp;3<br />
35+
85748&nbsp;Garching
36+
</p>
37+
</section>
38+
39+
<section>
40+
<h2>Terms of use</h2>
41+
<p>
42+
Texts, images, graphics as well as the design of these Internet pages may be subject to copyright. The following are not protected by copyright according to §5 of copyright law (Urheberrechtsgesetz (UrhG)).<br>
43+
Laws, ordinances, official decrees and announcements as well as decisions and officially written guidelines for decisions and other official works that have been published in the official interest for general knowledge, with the restriction that the provisions on prohibition of modification and indication of source in Section 62 (1) to (3) and Section 63 (1) and (2) UrhG apply accordingly.<br>
44+
As a private individual, you may use copyrighted material for private and other personal use within the scope of Section 53 UrhG. Any duplication or use of objects such as images, diagrams, sounds or texts in other electronic or printed publications is not permitted without our agreement. This consent will be granted upon request by the person responsible for the content. The reprinting and evaluation of press releases and speeches are generally permitted with reference to the source. Furthermore, texts, images, graphics and other files may be subject in whole or in part to the copyright of third parties. The persons responsible for the content will also provide more detailed information on the existence of possible third-party rights. </p>
45+
</section>
46+
47+
<section>
48+
<h2>Liability disclaimer</h2>
49+
<p>
50+
The information provided on this website has been collected and verified to the best of our knowledge and belief. However, there will be no warranty that the information provided is up-to-date, correct, complete, and available. There is no contractual relationship with users of this website.<br>
51+
We accept no liability for any loss or damage caused by using this website. The exclusion of liability does not apply where the provisions of the German Civil Code (BGB) on liability in case of breach of official duty are applicable (§ 839 of the BGB). We accept no liability for any loss or damage caused by malware when accessing or downloading data or the installation or use of software from this website.<br>
52+
Where necessary in individual cases: the exclusion of liability does not apply to information governed by the Directive 2006/123/EC of the European Parliament and of the Council. This information is guaranteed to be accurate and up to date.
53+
</p>
54+
</section>
55+
56+
<section>
57+
<h2>Links</h2>
58+
<p>
59+
Our own content is to be distinguished from cross-references (“links”) to websites of other providers. These links only provide access for using third-party content in accordance with § 8 of the German telemedia act (TMG). Prior to providing links to other websites, we review third-party content for potential civil or criminal liability. However, a continuous review of third-party content for changes is not possible, and therefore we cannot accept any responsibility. For illegal, incorrect, or incomplete content, including any damage arising from the use or non-use of third-party information, liability rests solely with the provider of the website.
60+
</p>
61+
</section>
62+
</div>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
$studi-chat-primary: #779EC4;
2+
3+
/* General wrapper */
4+
.imprint-wrapper {
5+
font-family: roboto, sans-serif;
6+
max-width: 800px;
7+
margin: 32px auto;
8+
padding: 0 24px 64px;
9+
line-height: 1.55;
10+
font-size: 15px;
11+
color: #333;
12+
}
13+
14+
/* Typography tweaks */
15+
h1 {
16+
font-size: 2rem;
17+
margin-bottom: 24px;
18+
color: $studi-chat-primary;
19+
}
20+
21+
h2 {
22+
margin: 32px 0 8px;
23+
font-size: 1.25rem;
24+
color: var(--primary-color, #072140);
25+
}
26+
27+
p { margin: 0 0 12px; }
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { ComponentFixture, TestBed } from '@angular/core/testing';
2+
3+
import { ImprintEnComponent } from './imprint.component';
4+
5+
describe('ImprintComponent', () => {
6+
let component: ImprintEnComponent;
7+
let fixture: ComponentFixture<ImprintEnComponent>;
8+
9+
beforeEach(async () => {
10+
await TestBed.configureTestingModule({
11+
imports: [ImprintEnComponent]
12+
})
13+
.compileComponents();
14+
15+
fixture = TestBed.createComponent(ImprintEnComponent);
16+
component = fixture.componentInstance;
17+
fixture.detectChanges();
18+
});
19+
20+
it('should create', () => {
21+
expect(component).toBeTruthy();
22+
});
23+
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { Component } from '@angular/core';
2+
import { HeaderComponent } from '../utils/header/header.component';
3+
4+
@Component({
5+
selector: 'app-imprint',
6+
standalone: true,
7+
imports: [
8+
HeaderComponent
9+
],
10+
templateUrl: './imprint.component.html',
11+
styleUrl: './imprint.component.scss'
12+
})
13+
export class ImprintEnComponent {
14+
15+
}
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
<app-header></app-header>
2+
3+
<div class="privacy-wrapper">
4+
<h1>Privacy</h1>
5+
6+
<section>
7+
<p>
8+
The Technical University of Munich (TUM) takes the protection of personal data very seriously and uses secure and encrypted communication according to proven procedures and state-of-the-art technologies (e.g. HTTPS with secure certificate from TUM, TLS 1.3, Strict Transport Security, Forward Secrecy, Same Site Cookie Protection) to protect the privacy of StudiAssist users in the best possible way. StudiAssist processes personal data in the context of teaching and counselling in compliance with the applicable data protection regulations. The legal basis for the processing of data is Art. 6 para. 1 lit. e GDPR (performance of a task carried out in the public interest).<br>
9+
In the following, we provide information on the type, scope and purpose of the collection and use of personal data. This information can be accessed at any time from our website.
10+
</p>
11+
</section>
12+
13+
<section>
14+
<h2>General Information</h2>
15+
<p><strong>Name and contact details of the person responsible:</strong><br />
16+
Technical University of Munich<br />
17+
Arcisstraße 21, 80333 Munich<br />
18+
Telephone: +49-(0)89-289-01<br />
19+
Email: poststelle(at)tum.de
20+
</p>
21+
22+
<p><strong>Name and contact details of the data protection officer</strong><br />
23+
The data protection officer of the Technical University of Munich<br />
24+
Arcisstraße 21, 80333 Munich<br />
25+
Telephone: +49-(0)89-289-17052<br />
26+
Email: beauftragter(at)datenschutz.tum.de
27+
</p>
28+
</section>
29+
30+
<section>
31+
<h2>Purpose and legal basis for the processing of personal data</h2>
32+
<p>
33+
The purpose of the processing is the fulfilment of legally assigned public tasks, in particular teaching and advising in the university environment. The processing is carried out on the basis of Art. 6 para. 1 lit. c GDPR and supplementary university law (BayHschG, APSO, BayFEV).
34+
</p>
35+
</section>
36+
37+
<section>
38+
<h2>The use of artificial intelligence</h2>
39+
<p>
40+
AI models that are operated via the Azure OpenAI Service of Microsoft Ireland Operations Ltd. can be used to answer user enquiries. These services are used exclusively via European server regions. The processing takes place within the framework of the legal regulations, in particular in compliance with the GDPR.<br>
41+
When using StudiAssist, there is no targeted collection of personal data. If users voluntarily enter personal information (e.g. names) in their enquiries, this is processed solely for the purpose of directly answering the enquiry and without permanent storage or profiling. The responsibility for entering sensitive content lies with the user.
42+
</p>
43+
</section>
44+
45+
<section>
46+
<h2>Recipients of personal data</h2>
47+
<p>
48+
The technical operation of the application is carried out by the Chair of Applied Education Technologies at the Technical University of Munich.<br>
49+
If necessary, your data will be transmitted to the responsible supervisory and auditing authorities for the exercise of the respective control rights.<br>
50+
In order to avert risks to information technology security, data may be forwarded to the State Office for Information Technology Security in the case of electronic transmission and processed there on the basis of Art. 12 ff. of the Bavarian E-Government Act.<br>
51+
</p>
52+
</section>
53+
54+
<section>
55+
<h2>Duration of the storage of personal data</h2>
56+
<p>
57+
Your data will only be stored for as long as is necessary for the fulfillment of duties, taking into account statutory retention periods.
58+
</p>
59+
</section>
60+
61+
<section>
62+
<h2>Your rights</h2>
63+
<ul>
64+
<li>You have the right of access (Art. 15 GDPR).</li>
65+
<li>If incorrect personal data is processed, you have the right to rectification (Art. 16 GDPR).</li>
66+
<li>If the legal requirements are met, you may request the deletion or restriction of processing (Art. 17 and 18 GDPR).</li>
67+
<li>If you have consented to the processing or if there is a contract for data processing and the data processing is carried out with the help of automated procedures, you may have a right to data portability (Art. 20 GDPR).</li>
68+
<li>If you have consented to the processing and the processing is based on this consent, you can revoke the consent at any time for the future. The lawfulness of the data processing carried out on the basis of the consent until the revocation is not affected by it.</li>
69+
</ul>
70+
<p>
71+
You have the right to object to the processing of your data at any time on grounds relating to your particular situation, if the processing is carried out exclusively on the basis of Art. 6(1) lit. e or f GDPR (Art. 21(1)(1) GDPR).
72+
</p>
73+
</section>
74+
75+
<section>
76+
<h2>Right to appeal at the supervisory authority</h2>
77+
<p>
78+
Furthermore, you have the right to appeal at the Bavarian State Commissioner for Data Protection. You can reach them under the following contact details:<br>
79+
Postal address: Postfach 22 22 19, 80502 Munich, Germany.<br />
80+
Address: Wagmüllerstraße 18, 80538 Munich, Germany<br />
81+
Telephone: +49-(0)89-212672-0<br />
82+
Email: poststelle(at)datenschutz-bayern.de<br />
83+
<a href="https://www.datenschutz-bayern.de" target="_blank" rel="noopener noreferrer">www.datenschutz-bayern.de</a>
84+
</p>
85+
</section>
86+
87+
<section>
88+
<h2>Technische Umsetzung</h2>
89+
<p>
90+
Die technische Umsetzung und das Hosting der Anwendung werden durch den Lehrstuhl für Applied Education Technologies an der Technischen Universität München durchgeführt.
91+
</p>
92+
</section>
93+
94+
<section>
95+
<h2>Technical implementation</h2>
96+
<p>
97+
The following data is collected when you visit our website: IP address, time, requested resource, status code, browser information. The data is used for security and error analysis.
98+
</p>
99+
</section>
100+
101+
<section>
102+
<h2>Cookies</h2>
103+
<p>
104+
In order to extend the range of functions of our Internet offering and to make its use more comfortable for you, we partly use so-called "cookies". With the help of these cookies, data can be stored on your computer when you call up our website. However, you can deactivate the storage of cookies or set your browser so that cookies are only stored for the duration of the respective connection to the Internet. This could, however, limit the functional scope of our offering.
105+
</p>
106+
</section>
107+
108+
<section>
109+
<h2>Disclosure and rectification</h2>
110+
<p>
111+
You have the right, upon written request and free of charge, to obtain information about the personal data stored about you. In addition, you have the right to have incorrect data corrected. You can reach the data protection officer of the Technical Univerity of Munich by e-mail at beauftragter(at)datenschutz.tum.de or via www.datenschutz.tum.de.
112+
</p>
113+
</section>
114+
</div>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
$studi-chat-primary: #779EC4;
2+
3+
/* General wrapper */
4+
.privacy-wrapper {
5+
font-family: roboto, sans-serif;
6+
max-width: 800px;
7+
margin: 32px auto;
8+
padding: 0 24px 64px;
9+
line-height: 1.55;
10+
font-size: 15px;
11+
color: #333;
12+
}
13+
14+
/* Typography tweaks */
15+
h1 {
16+
font-size: 2rem;
17+
margin-bottom: 24px;
18+
color: $studi-chat-primary;
19+
}
20+
21+
h2 {
22+
margin: 32px 0 8px;
23+
font-size: 1.25rem;
24+
color: var(--primary-color, #072140);
25+
}
26+
27+
p { margin: 0 0 12px; }
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { ComponentFixture, TestBed } from '@angular/core/testing';
2+
3+
import { PrivacyEnComponent } from './privacy.component';
4+
5+
describe('PrivacyComponent', () => {
6+
let component: PrivacyEnComponent;
7+
let fixture: ComponentFixture<PrivacyEnComponent>;
8+
9+
beforeEach(async () => {
10+
await TestBed.configureTestingModule({
11+
imports: [PrivacyEnComponent]
12+
})
13+
.compileComponents();
14+
15+
fixture = TestBed.createComponent(PrivacyEnComponent);
16+
component = fixture.componentInstance;
17+
fixture.detectChanges();
18+
});
19+
20+
it('should create', () => {
21+
expect(component).toBeTruthy();
22+
});
23+
});

0 commit comments

Comments
 (0)