Compare commits
52 Commits
Author | SHA1 | Date |
---|---|---|
Christian Landgren | a8281d4370 | |
Christian Landgren | 098bc544f2 | |
Christian Landgren | c16d60c2e2 | |
Christian Landgren | a7fa22cd54 | |
Christian Landgren | a7b9d81714 | |
Christian Landgren | b8ed895e52 | |
Christian Landgren | caafb59f8d | |
Christian Landgren | 81e448c035 | |
Christian Landgren | 62de54ef80 | |
Christian Landgren | d5e4bfd149 | |
Christian Landgren | 28e1481e3f | |
semantic-release-bot | f2a87117ba | |
Kajetan Kazimierczak | 6eb6d3a6e3 | |
Kajetan Kazimierczak | c0e6ce9e06 | |
Weblate (bot) | c9907a68b6 | |
Kajetan Kazimierczak | 320ab1f1f5 | |
Kajetan Kazimierczak | 7962234e26 | |
Kajetan Kazimierczak | b66f56b312 | |
Kajetan Kazimierczak | 442aad7fda | |
semantic-release-bot | 1f2c7ee762 | |
Kajetan Kazimierczak | d51cfe36fe | |
Kajetan Kazimierczak | c93e27bec0 | |
Kajetan Kazimierczak | 84ddda3f46 | |
semantic-release-bot | ab90b944ae | |
Sebastian Palmqvist | 34c376a727 | |
Sergio Avalos | ce535518a9 | |
Kajetan Kazimierczak | 09ae4f0eaa | |
Kajetan Kazimierczak | b5a2943fbb | |
Kajetan Kazimierczak | 4d3f940171 | |
Kajetan Kazimierczak | 6d9325c20c | |
Kajetan Kazimierczak | 27e9fb8cf7 | |
Kajetan Kazimierczak | c26b118ad0 | |
Kajetan Kazimierczak | 4e51bb8de7 | |
Kajetan Kazimierczak | 5d61cd150a | |
Kajetan Kazimierczak | 7e5013e7ca | |
semantic-release-bot | 394d0d973d | |
Kajetan Kazimierczak | e6ba622fa9 | |
semantic-release-bot | bee6d59283 | |
Mohammed Chammam | 20ae87fee1 | |
Christian Landgren | 565c27e6fb | |
semantic-release-bot | 6589d85ab0 | |
Sebastian Palmqvist | fef71c7923 | |
semantic-release-bot | ae5fd0624c | |
Oskar Strömberg | 61d47b4440 | |
semantic-release-bot | ee35ba7108 | |
Kajetan Kazimierczak | 25a2d7f3f5 | |
Kajetan Kazimierczak | 0db53ca046 | |
Kajetan Kazimierczak | f7493767b0 | |
Kajetan Kazimierczak | 7b3dfb91e7 | |
Kajetan Kazimierczak | 52c491213c | |
Viktor Sarström | 3a9c337bdd | |
Viktor Sarström | 68249e849a |
|
@ -4,6 +4,8 @@ on:
|
|||
push:
|
||||
branches:
|
||||
- main
|
||||
paths-ignore:
|
||||
- 'apps/website/**'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
name: Docker
|
||||
|
||||
# Build to docker registry. This will trigger an update event from the Kubernetes cluster
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
# Publish semver tags as releases.
|
||||
tags: [ 'v*.*.*' ]
|
||||
paths:
|
||||
- 'apps/website/**'
|
||||
|
||||
pull_request:
|
||||
branches: [ "main" ]
|
||||
|
||||
env:
|
||||
# Use docker.io for Docker Hub if empty
|
||||
REGISTRY: ghcr.io
|
||||
# github.repository as <account>/<repo>
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
# This is used to complete the identity challenge
|
||||
# with sigstore/fulcio when running outside of PRs.
|
||||
id-token: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- run: |
|
||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git config --global user.name "github-actions[bot]"
|
||||
if [[ $GITHUB_REF == refs/tags/production* ]]; then
|
||||
npm version major
|
||||
elif [[ $GITHUB_REF == refs/tags/staging* ]]; then
|
||||
npm version minor
|
||||
else
|
||||
npm version patch
|
||||
fi
|
||||
|
||||
- name: 📝 Get Current Version
|
||||
id: package-version
|
||||
uses: martinbeentjes/npm-get-version-action@main
|
||||
|
||||
# Set up BuildKit Docker container builder to be able to build
|
||||
# multi-platform images and export cache
|
||||
# https://github.com/docker/setup-buildx-action
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0
|
||||
|
||||
# Login against a Docker registry except on PR
|
||||
# https://github.com/docker/login-action
|
||||
- name: Log into registry ${{ env.REGISTRY }}
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Build and push Docker image with Buildx (don't push on PR)
|
||||
# https://github.com/docker/build-push-action
|
||||
- name: Build and push Docker image
|
||||
id: build-and-push
|
||||
uses: docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 # v5.0.0
|
||||
with:
|
||||
context: apps/website
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: |
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.package-version.outputs.current-version}},
|
||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
|
@ -0,0 +1 @@
|
|||
16.19.1
|
1116
CHANGELOG.md
1116
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
|
@ -161,7 +161,7 @@ Once done, create a _pull request_ where you explain why we should incorporate y
|
|||
If you're new to GitHub, there's a number of excellent guides available, such as [this one on forking projects and making pull requests](https://guides.github.com/activities/forking/).
|
||||
|
||||
There are many ways to contribute to the project. \
|
||||
If you don't know how to program and want help, you can [file an issue](https://github.com/kolplattformen/skolplattformen-app/issues/new) to let us know when something isn't working properly. \
|
||||
If you don't know how to program and want help, you can [file an issue](https://github.com/kolplattformen/skolplattformen/issues/new) to let us know when something isn't working properly. \
|
||||
We're super duper happy for both issues and pull requests, and we try to answer all of them as soon as humanly possible.
|
||||
|
||||
Another way to contribute is by helping translate Öppna skolplattformen [on Hosted Weblate](https://hosted.weblate.org/engage/skolplattformen-app/) into a new language, or to improve existing translations.
|
||||
|
@ -194,7 +194,7 @@ If you're offended by this initiative, rest assured there is no reason to be —
|
|||
|
||||
## License
|
||||
|
||||
Öppna skolplattformen is copyright 2020–2021 Not Free Beer AB.
|
||||
Öppna skolplattformen is copyright 2020–2024 Not Free Beer AB.
|
||||
|
||||
Licensed under the [Apache License, Version 2.0](LICENSE) (the "License"); you may use Öppna skolplattformen in compliance with the License. A copy of the License is included with this repository.
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ android {
|
|||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 20000
|
||||
versionName "3.0.5"
|
||||
versionName "3.0.10"
|
||||
}
|
||||
splits {
|
||||
abi {
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
android:theme="@style/AppTheme">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true"
|
||||
android:label="@string/app_name"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
|
||||
android:launchMode="singleTask"
|
||||
|
|
|
@ -4,9 +4,10 @@ buildscript {
|
|||
ext {
|
||||
buildToolsVersion = "30.0.2"
|
||||
minSdkVersion = 21
|
||||
compileSdkVersion = 30
|
||||
targetSdkVersion = 30
|
||||
compileSdkVersion = 33
|
||||
targetSdkVersion = 33
|
||||
ndkVersion = "21.4.7075529"
|
||||
kotlinVersion = "1.6.0"
|
||||
}
|
||||
repositories {
|
||||
google()
|
||||
|
@ -35,12 +36,6 @@ allprojects {
|
|||
google()
|
||||
maven { url 'https://www.jitpack.io' }
|
||||
}
|
||||
configurations.all {
|
||||
resolutionStrategy {
|
||||
force "com.facebook.react:react-native:0.67.+"
|
||||
force "com.facebook.react:hermes-engine:0.67.+"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
subprojects {
|
||||
|
|
|
@ -139,7 +139,10 @@ const TabNavigator = ({
|
|||
)
|
||||
|
||||
const getHeaderTitle = (route: any) => {
|
||||
const routeName = getFocusedRouteNameFromRoute(route) ?? 'News'
|
||||
const routeName =
|
||||
getFocusedRouteNameFromRoute(route) ??
|
||||
route.params.initialRouteName ??
|
||||
'News'
|
||||
return getRouteTitleFromName(routeName)
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ import {
|
|||
} from '@ui-kitten/components'
|
||||
import moment, { Moment } from 'moment'
|
||||
import React, { useEffect } from 'react'
|
||||
import { TouchableOpacity, useColorScheme, View } from 'react-native'
|
||||
import { Pressable, useColorScheme, View } from 'react-native'
|
||||
import { useTranslation } from '../hooks/useTranslation'
|
||||
import { Colors, Layout, Sizing } from '../styles'
|
||||
import { getMeaningfulStartingDate } from '../utils/calendarHelpers'
|
||||
|
@ -157,11 +157,15 @@ export const ChildListItem = ({
|
|||
)
|
||||
|
||||
return (
|
||||
<TouchableOpacity
|
||||
onPress={() => navigation.navigate('Child', { child, color })}
|
||||
>
|
||||
<View style={styles.card}>
|
||||
<View style={styles.cardHeader}>
|
||||
<View style={styles.card}>
|
||||
<View style={styles.cardHeader}>
|
||||
<Pressable
|
||||
style={({ pressed }) => [
|
||||
styles.cardHeaderLeft || {},
|
||||
{ opacity: pressed ? 0.5 : 1 },
|
||||
]}
|
||||
onPress={() => navigation.navigate('Child', { child, color })}
|
||||
>
|
||||
<View style={styles.cardHeaderLeft}>
|
||||
<StudentAvatar name={studentName(child.name)} color={color} />
|
||||
<View style={styles.cardHeaderText}>
|
||||
|
@ -178,16 +182,37 @@ export const ChildListItem = ({
|
|||
name="star"
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
</Pressable>
|
||||
</View>
|
||||
|
||||
<Pressable
|
||||
style={({ pressed }) => ['' || {}, { opacity: pressed ? 0.5 : 1 }]}
|
||||
onPress={() =>
|
||||
navigation.navigate('Child', {
|
||||
child,
|
||||
color,
|
||||
initialRouteName: 'Calendar',
|
||||
})
|
||||
}
|
||||
>
|
||||
<DaySummary child={child} date={meaningfulStartingDate} />
|
||||
|
||||
{scheduleAndCalendarThisWeek.slice(0, 3).map((calendarItem, i) => (
|
||||
<Text category="p1" key={i}>
|
||||
{`${calendarItem.title} (${displayDate(calendarItem.startDate)})`}
|
||||
</Text>
|
||||
))}
|
||||
</Pressable>
|
||||
|
||||
<Pressable
|
||||
style={({ pressed }) => ['' || {}, { opacity: pressed ? 0.5 : 1 }]}
|
||||
onPress={() =>
|
||||
navigation.navigate('Child', {
|
||||
child,
|
||||
color,
|
||||
initialRouteName: 'News',
|
||||
})
|
||||
}
|
||||
>
|
||||
<Text category="c2" style={styles.label}>
|
||||
{t('navigation.news')}
|
||||
</Text>
|
||||
|
@ -202,43 +227,52 @@ export const ChildListItem = ({
|
|||
{newsItem.header ?? ''}
|
||||
</Text>
|
||||
))}
|
||||
</Pressable>
|
||||
|
||||
{scheduleAndCalendarThisWeek.length ||
|
||||
notificationsThisWeek.length ||
|
||||
newsThisWeek.length ? null : (
|
||||
<Text category="p1" style={styles.noNewNewsItemsText}>
|
||||
{t('news.noNewNewsItemsThisWeek')}
|
||||
{scheduleAndCalendarThisWeek.length ||
|
||||
notificationsThisWeek.length ||
|
||||
newsThisWeek.length ? null : (
|
||||
<Text category="p1" style={styles.noNewNewsItemsText}>
|
||||
{t('news.noNewNewsItemsThisWeek')}
|
||||
</Text>
|
||||
)}
|
||||
{shouldShowLunchMenu ? (
|
||||
<Pressable
|
||||
style={({ pressed }) => ['' || {}, { opacity: pressed ? 0.5 : 1 }]}
|
||||
onPress={() =>
|
||||
navigation.navigate('Child', {
|
||||
child,
|
||||
color,
|
||||
initialRouteName: 'Menu',
|
||||
})
|
||||
}
|
||||
>
|
||||
<Text category="c2" style={styles.label}>
|
||||
{meaningfulStartingDate.format(
|
||||
'[' + t('schedule.lunch') + '] dddd'
|
||||
)}
|
||||
</Text>
|
||||
)}
|
||||
{shouldShowLunchMenu ? (
|
||||
<>
|
||||
<Text category="c2" style={styles.label}>
|
||||
{meaningfulStartingDate.format(
|
||||
'[' + t('schedule.lunch') + '] dddd'
|
||||
)}
|
||||
</Text>
|
||||
<Text>
|
||||
{menu[meaningfulStartingDate.isoWeekday() - 1]?.description}
|
||||
</Text>
|
||||
</>
|
||||
) : null}
|
||||
<Text>
|
||||
{menu[meaningfulStartingDate.isoWeekday() - 1]?.description}
|
||||
</Text>
|
||||
</Pressable>
|
||||
) : null}
|
||||
|
||||
<View style={styles.itemFooter}>
|
||||
<Button
|
||||
accessible
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={`${child.name}, ${t('abscense.title')}`}
|
||||
appearance="ghost"
|
||||
accessoryLeft={AlertIcon}
|
||||
status="primary"
|
||||
style={styles.absenceButton}
|
||||
onPress={() => navigation.navigate('Absence', { child })}
|
||||
>
|
||||
{t('abscense.title')}
|
||||
</Button>
|
||||
</View>
|
||||
<View style={styles.itemFooter}>
|
||||
<Button
|
||||
accessible
|
||||
accessibilityRole="button"
|
||||
accessibilityLabel={`${child.name}, ${t('abscense.title')}`}
|
||||
appearance="ghost"
|
||||
accessoryLeft={AlertIcon}
|
||||
status="primary"
|
||||
style={styles.absenceButton}
|
||||
onPress={() => navigation.navigate('Absence', { child })}
|
||||
>
|
||||
{t('abscense.title')}
|
||||
</Button>
|
||||
</View>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,11 @@ export const NavigationTitle = ({ title, subtitle }: NavigationTitleProps) => {
|
|||
{title}
|
||||
</Text>
|
||||
)}
|
||||
{subtitle && <Text style={styles.subtitle}>{subtitle}</Text>}
|
||||
{subtitle && (
|
||||
<Text style={styles.subtitle}>
|
||||
{subtitle.substring(0, subtitle.indexOf(' '))}
|
||||
</Text>
|
||||
)}
|
||||
</View>
|
||||
)
|
||||
}
|
||||
|
@ -32,5 +36,5 @@ const styles = StyleSheet.create({
|
|||
...fontSize.sm,
|
||||
fontWeight: '500',
|
||||
},
|
||||
subtitle: { ...fontSize.xxs },
|
||||
subtitle: { ...fontSize.base },
|
||||
})
|
||||
|
|
|
@ -299,7 +299,7 @@ PODS:
|
|||
- react-native-simple-toast (1.1.3):
|
||||
- React-Core
|
||||
- Toast (~> 4.0.0)
|
||||
- react-native-webview (11.15.0):
|
||||
- react-native-webview (12.4.0):
|
||||
- React-Core
|
||||
- React-perflogger (0.66.4)
|
||||
- React-RCTActionSheet (0.66.4):
|
||||
|
@ -617,7 +617,7 @@ SPEC CHECKSUMS:
|
|||
react-native-restart: 733a51ad137f15b0f8dc34c4082e55af7da00979
|
||||
react-native-safe-area-context: 584dc04881deb49474363f3be89e4ca0e854c057
|
||||
react-native-simple-toast: bf002828cf816775a6809f7a9ec3907509bce11f
|
||||
react-native-webview: e89bf2dba26a04cda967814df3ed1be99f291233
|
||||
react-native-webview: 65f1143983cfeaedf02fd25b2621d3f4a37075de
|
||||
React-perflogger: 93075d8931c32cd1fce8a98c15d2d5ccc4d891bd
|
||||
React-RCTActionSheet: 7d3041e6761b4f3044a37079ddcb156575fb6d89
|
||||
React-RCTAnimation: 743e88b55ac62511ae5c2e22803d4f503f2a3a13
|
||||
|
@ -646,4 +646,4 @@ SPEC CHECKSUMS:
|
|||
|
||||
PODFILE CHECKSUM: f4a92b32cc4938e15ad7ccfefe9898548670abed
|
||||
|
||||
COCOAPODS: 1.11.2
|
||||
COCOAPODS: 1.14.2
|
||||
|
|
|
@ -530,9 +530,9 @@
|
|||
);
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-app-appTests/Pods-app-appTests-frameworks.sh",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-DoubleConversion/double-conversion.framework/double-conversion",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/double-conversion/double-conversion.framework/double-conversion",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL/OpenSSL.framework/OpenSSL",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes/hermes.framework/hermes",
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputPaths = (
|
||||
|
@ -610,9 +610,9 @@
|
|||
);
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-app/Pods-app-frameworks.sh",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-DoubleConversion/double-conversion.framework/double-conversion",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/double-conversion/double-conversion.framework/double-conversion",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL/OpenSSL.framework/OpenSSL",
|
||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes/hermes.framework/hermes",
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputPaths = (
|
||||
|
@ -794,7 +794,7 @@
|
|||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = app/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 3.0.5;
|
||||
MARKETING_VERSION = 3.0.10;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
|
@ -823,7 +823,7 @@
|
|||
DEVELOPMENT_TEAM = "";
|
||||
INFOPLIST_FILE = app/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 3.0.5;
|
||||
MARKETING_VERSION = 3.0.10;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
|
|
|
@ -4,13 +4,18 @@
|
|||
"noNewNewsItemsThisWeek": "No hay noticias nuevas esta semana.",
|
||||
"backToChild": "Volver al niño",
|
||||
"title": "Noticias de Skolplattformen",
|
||||
"published": "Publicada"
|
||||
"published": "Publicada",
|
||||
"updated": "Actualizado",
|
||||
"search": {
|
||||
"placeholder": "Buscar en las noticias…"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"notifications": "Notificaciones",
|
||||
"news": "Noticias",
|
||||
"calender": "Calendario",
|
||||
"menu": "Menú"
|
||||
"menu": "Menú",
|
||||
"classmates": "Compañeros de clase"
|
||||
},
|
||||
"language": {
|
||||
"changeLanguage": "Cambiar idioma",
|
||||
|
@ -25,20 +30,28 @@
|
|||
"loading": "Cargando…",
|
||||
"confirm": "Confirmar",
|
||||
"title": "Öppna skolplattformen",
|
||||
"cancel": "Anular"
|
||||
"cancel": "Anular",
|
||||
"tomorrow": "Mañana",
|
||||
"logoutAndClearPersonalData": "Cierre la sesión y borre sus datos personales",
|
||||
"logoutAndClearAllDataInclSettings": "Cierre la sesión y borre todos sus datos incluyendo sus configuraciones"
|
||||
},
|
||||
"children": {
|
||||
"viewStatus": "Ver estado en skolplattformen.org",
|
||||
"tryAgain": "Intentar otra vez",
|
||||
"title": "Tus hijos",
|
||||
"noKids_title": "Sin niños"
|
||||
"noKids_title": "Sin niños",
|
||||
"loadingErrorHeading": "¡Ahijoles!",
|
||||
"loadingErrorInformationText": "La página no pudo ser cargada. Intente de nuevo o mire su estado actual en skolplattformen.org.",
|
||||
"noKids_description": "No hay infantes registrados en la ciudad de Estocolmo con su número de identificación personal"
|
||||
},
|
||||
"calender": {
|
||||
"showCalenderActions": "Mostrar acciones de calendario",
|
||||
"saveToCalenderSuccess": "✔️ Guardado en el calendario",
|
||||
"saveToCalenderError": "Algo salió mal",
|
||||
"saveToCalender": "Guardar en calendario",
|
||||
"approveAccessToCalender": "Tienes que aprobar el acceso a tu calendario"
|
||||
"approveAccessToCalender": "Tienes que aprobar el acceso a tu calendario",
|
||||
"emptyText": "No hay algo que mostrar",
|
||||
"emptyHeadline": "El calendario está un poco vacío"
|
||||
},
|
||||
"auth": {
|
||||
"words": {
|
||||
|
@ -60,8 +73,8 @@
|
|||
"fast": "rápida",
|
||||
"fun": "divertido"
|
||||
},
|
||||
"subtitle": "La alternativa {{word}}",
|
||||
"placeholder_SocialSecurityNumber": "Tu personnummer",
|
||||
"subtitle": "La alternativa de {{word}}",
|
||||
"placeholder_SocialSecurityNumber": "Tu número de identidad personal",
|
||||
"loginFailed": "No se pudo iniciar sesión. Vuelva a intentarlo.",
|
||||
"chooseLoginMethod": "Elija el método de inicio de sesión",
|
||||
"bankid": {
|
||||
|
@ -72,17 +85,27 @@
|
|||
},
|
||||
"loginAsTestUser": "Inicie sesión como usuario de pruebas",
|
||||
"a11y_change_language": "Elija su idioma",
|
||||
"a11y_image_two_boys": "Fotografia de dos personas mirando su telefono movil"
|
||||
"a11y_image_two_boys": "Fotografia de dos personas mirando su telefono movil",
|
||||
"chooseSchoolPlatform": "Elija la plataforma",
|
||||
"a11y_clear_social_security_input_field": "Borrar el campo del número de identificación personal",
|
||||
"loginSuccessful": "Se ha iniciado la sesión correctamente, cargando…",
|
||||
"freja": {
|
||||
"OpenManually": "Abrir Freja eID+ manualmente",
|
||||
"OpenOnThisDevice": "Abrir Freja eID+ en este dispositivo",
|
||||
"Waiting": "Esperando a Freja eID+…"
|
||||
},
|
||||
"a11y_select_login_method": "Seleccione el metodo para iniciar sesión"
|
||||
},
|
||||
"abscense": {
|
||||
"title": "Informar ausencia",
|
||||
"startTime": "hora de inicio",
|
||||
"selectAbscenseStartTime": "Elige la hora de inicio",
|
||||
"personalNumberMissing": "Falta el personnummer",
|
||||
"invalidPersonalNumber": "El personnumer no es válido",
|
||||
"personalNumberMissing": "Falta el número personal",
|
||||
"invalidPersonalNumber": "Número personal inválido",
|
||||
"entireDay": "Día completo",
|
||||
"endTime": "hora de finalización",
|
||||
"selectAbscenseEndTime": "Elige la hora de finalización"
|
||||
"selectAbscenseEndTime": "Elige hora de finalización",
|
||||
"childsPersonalNumber": "Numero de identificación del infante (personnummer)"
|
||||
},
|
||||
"abbrevations": {
|
||||
"upperSecondarySchool": "Escuela Secundaria Obligatoria",
|
||||
|
@ -92,5 +115,42 @@
|
|||
},
|
||||
"notifications": {
|
||||
"notificationTitle": "Notificación: {{message}} ({{dateCreated}})"
|
||||
},
|
||||
"contact": {
|
||||
"home": "Dirección",
|
||||
"email": "Correo electrónico",
|
||||
"call": "Llamar",
|
||||
"a11y_show_contact_info_button_label": "Mostrar información de contacto",
|
||||
"a11y_show_contact_info_button_hint": "Muestra información de contacto",
|
||||
"sms": "Mensaje de texto"
|
||||
},
|
||||
"settings": {
|
||||
"language": "Idioma",
|
||||
"useSystemTheme": "Use el aspecto claro/oscuro dispositivo",
|
||||
"licenses": "Licencias",
|
||||
"themeAuto": "Automático",
|
||||
"appearance": "Diseño",
|
||||
"theme": "Aspecto",
|
||||
"settings": "Configuraciones"
|
||||
},
|
||||
"themes": {
|
||||
"dark": "Oscuro",
|
||||
"light": "Claro"
|
||||
},
|
||||
"menu": {
|
||||
"emptyText": "No hay nada para esta semana",
|
||||
"emptyHeadline": "El menu del almuerzo se ve algo vacio"
|
||||
},
|
||||
"classmates": {
|
||||
"class": "Clase",
|
||||
"child": "Infante",
|
||||
"contactsForGuardiansFor": "Información de contacto de los tutores de"
|
||||
},
|
||||
"schedule": {
|
||||
"gymBag": "Mochila de gimnasio",
|
||||
"end": "Termina",
|
||||
"start": "Inicia",
|
||||
"lunch": "Almuerzo",
|
||||
"week": "Semana"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,8 @@
|
|||
"socialSecurityNumber": "Burgerservicenummer",
|
||||
"cancel": "Annuleren",
|
||||
"logoutAndClearAllDataInclSettings": "Log uit en wis alle gegevens inclusief instellingen",
|
||||
"logoutAndClearPersonalData": "Uitloggen en persoonlijke gegevens wissen"
|
||||
"logoutAndClearPersonalData": "Uitloggen en persoonlijke gegevens wissen",
|
||||
"tomorrow": "Morgen"
|
||||
},
|
||||
"auth": {
|
||||
"placeholder_SocialSecurityNumber": "Jouw burgerservicenummer",
|
||||
|
@ -46,7 +47,14 @@
|
|||
"a11y_select_login_method": "Selecteer de inlogmethode",
|
||||
"a11y_clear_social_security_input_field": "Wis het veld voor het burgerservicenummer",
|
||||
"a11y_image_two_boys": "Foto van twee mensen die naar hun mobiele telefoons kijken",
|
||||
"a11y_change_language": "Selecteer je taal"
|
||||
"a11y_change_language": "Selecteer je taal",
|
||||
"chooseSchoolPlatform": "Platform kiezen",
|
||||
"freja": {
|
||||
"OpenManually": "Freja eID+ handmatig openen",
|
||||
"Waiting": "Wachten op Freja eID+…",
|
||||
"OpenOnThisDevice": "Freja eID+ openen op dit apparaat"
|
||||
},
|
||||
"loginSuccessful": "Inloggen gelukt, laden…"
|
||||
},
|
||||
"abbrevations": {
|
||||
"preSchool": "Peuterschool",
|
||||
|
@ -98,7 +106,9 @@
|
|||
"approveAccessToCalender": "Je moet de toegang tot je agenda goedkeuren",
|
||||
"saveToCalenderError": "Er is iets fout gegaan",
|
||||
"saveToCalenderSuccess": "✔️ Opgeslagen in kalender",
|
||||
"saveToCalender": "Opslaan in kalender"
|
||||
"saveToCalender": "Opslaan in kalender",
|
||||
"emptyHeadline": "De kalender ziet er nogal leeg uit",
|
||||
"emptyText": "Kon niets vinden om te laten zien"
|
||||
},
|
||||
"notifications": {
|
||||
"notificationTitle": "Melding: {{message}} ({{dateCreated}})"
|
||||
|
@ -114,10 +124,11 @@
|
|||
"end": "Eind",
|
||||
"gymBag": "Sporttas",
|
||||
"lunch": "Middageten",
|
||||
"start": "Start"
|
||||
"start": "Start",
|
||||
"week": "Week"
|
||||
},
|
||||
"contact": {
|
||||
"a11y_show_contact_info_button_hint": "Toon contactgegevens",
|
||||
"a11y_show_contact_info_button_hint": "Toont contactgegevens",
|
||||
"email": "E-mail",
|
||||
"home": "Adres",
|
||||
"call": "Telefoongesprek",
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
k8s
|
||||
k8s
|
|
@ -0,0 +1,44 @@
|
|||
# Install dependencies only when needed
|
||||
FROM node:16-alpine AS builder
|
||||
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
|
||||
RUN apk add --no-cache libc6-compat autoconf automake build-base curl git libtool make nodejs npm pkgconf nasm yasm optipng
|
||||
WORKDIR /app
|
||||
COPY package.json yarn.lock ./
|
||||
RUN yarn install --frozen-lockfile
|
||||
|
||||
COPY . .
|
||||
ENV NEXT_TELEMETRY_DISABLED 1
|
||||
|
||||
RUN yarn build
|
||||
|
||||
# Production image, copy all the files and run next
|
||||
FROM node:16-alpine AS runner
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV production
|
||||
|
||||
RUN addgroup -g 1001 -S nodejs
|
||||
RUN adduser -S nextjs -u 1001
|
||||
|
||||
# You only need to copy next.config.js if you are NOT using the default configuration
|
||||
# COPY --from=builder /app/next.config.js ./
|
||||
COPY --from=builder /app/node_modules ./node_modules
|
||||
COPY --from=builder /app/package.json ./package.json
|
||||
COPY --from=builder /app/next.* ./
|
||||
COPY --from=builder /app/*.js ./
|
||||
COPY --from=builder /app/*.ts ./
|
||||
COPY --from=builder /app/public ./public
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
|
||||
|
||||
USER nextjs
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
ENV PORT 3000
|
||||
|
||||
# Next.js collects completely anonymous telemetry data about general usage.
|
||||
# Learn more here: https://nextjs.org/telemetry
|
||||
# Uncomment the following line in case you want to disable telemetry.
|
||||
ENV NEXT_TELEMETRY_DISABLED 1
|
||||
|
||||
CMD ["yarn", "start"]
|
|
@ -56,6 +56,11 @@ const Footer = () => {
|
|||
Integritetspolicy
|
||||
</Link.Internal>
|
||||
</li>
|
||||
<li>
|
||||
<Link.Internal href="/integritetspolicy-elevapp">
|
||||
Integritetspolicy ElevApp
|
||||
</Link.Internal>
|
||||
</li>
|
||||
<li>
|
||||
<Link.Internal href="/qa">Frågor och svar</Link.Internal>
|
||||
</li>
|
||||
|
|
|
@ -3,7 +3,7 @@ import DownloadButtons from './DownloadButtons'
|
|||
import Icon from './Icon'
|
||||
import SectionTitle from './SectionTitle'
|
||||
|
||||
export const price = 11
|
||||
export const price = 0
|
||||
|
||||
const baseFeatures = [
|
||||
{
|
||||
|
|
|
@ -17,6 +17,14 @@ const baseFeatures = [
|
|||
included: true,
|
||||
title: 'Se notifieringar',
|
||||
},
|
||||
{
|
||||
included: true,
|
||||
title: 'Se klasslista',
|
||||
},
|
||||
{
|
||||
included: true,
|
||||
title: 'Se schema',
|
||||
},
|
||||
{
|
||||
included: false,
|
||||
title: 'Gratis support',
|
||||
|
@ -32,17 +40,12 @@ const Pricing = () => {
|
|||
<section className="px-5 py-8 md:px-0 md:py-32" id="vad-kostar-det">
|
||||
<div className="max-w-2xl mx-auto">
|
||||
<SectionTitle
|
||||
title="Varför inte gratis?"
|
||||
text={`
|
||||
Vi som bygger appen vill gärna fortsätta vidareutveckla den och även ha möjlighet att ge ersättning
|
||||
till de som hjälper till. Vi gjorde ett försök att ge ut appen gratis och hoppades att fler kunde stötta oss via
|
||||
Patreon istället. Det visade sig inte vara hållbart men om vi får fler sponsorer så kommer vi göra appen gratis igen!
|
||||
`}
|
||||
title="Appen är Gratis,"
|
||||
text={`samtidigt, för att kunna fortsätta utveckla och bibehålla appens kvalitet så länge som möjligt, skulle vi uppskatta mycket om du bidrar på Patreon!`}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex">
|
||||
<div className="flex flex-col items-center inline-block px-5 py-8 mx-auto text-center shadow-lg rounded-md dark:bg-gray-800">
|
||||
<h3 className="text-3xl text-gray-800 dark:text-gray-400">Just nu</h3>
|
||||
<div className="mt-5 text-6xl text-pink-500">
|
||||
{formatPrice(price)}
|
||||
</div>
|
||||
|
|
|
@ -87,7 +87,7 @@ const Privacy = () => {
|
|||
<p>
|
||||
Denna integritetspolicy gäller fr.o.m. 2021-09-13. Ändringar i denna
|
||||
policy finns dokumenterade på vår{' '}
|
||||
<Link.External href="https://github.com/kolplattformen/skolplattformen-app/">
|
||||
<Link.External href="https://github.com/kolplattformen/skolplattformen/">
|
||||
GitHub
|
||||
</Link.External>
|
||||
.
|
||||
|
|
|
@ -0,0 +1,105 @@
|
|||
import Link from './Link'
|
||||
|
||||
const PrivacyElevApp = () => {
|
||||
return (
|
||||
<div>
|
||||
<div className="max-w-6xl mx-auto px-5 md:px-0 my-5 md:my-24 prose dark:prose-dark">
|
||||
<h1>Öppna Elevappen</h1>
|
||||
<h2>Integritetspolicy</h2>
|
||||
<p>
|
||||
"Öppna Elevappen", hädanefter "appen", byggs av "Not free beer
|
||||
AB" som en kommersiell app. Appen hämtar all information från
|
||||
respektive skolplattform, hädanefter Skolplattformen, efter
|
||||
inloggning via respektive plattforms inloggningsmetod. Appens funktion är därmed direkt knuten till
|
||||
att Skolplattformen fungerar. Vi kan endast ta ansvar för att vår kod
|
||||
fungerar – inte deras.
|
||||
</p>
|
||||
<p>
|
||||
Denna sida är till för att informera våra besökare och användare om
|
||||
våra policies gällande insamling och hantering av personlig
|
||||
information från användare av tjänsten.
|
||||
</p>
|
||||
<h3>TLDR (~kort sammanfattning på ren svenska)</h3>
|
||||
<p>
|
||||
All information i appen kommer från Skolplattformen. Informationen
|
||||
lämnar aldrig din telefon. Vi är snudd på integritetsfanatiker och
|
||||
skulle aldrig drömma om att samla in information om dig eller dina
|
||||
barn. Det enda som lagras är sånt som lagras i din telefon för att det
|
||||
ska gå snabbare att använda appen. Om vi börjar samla loggar för att
|
||||
lättare kunna lösa eventuella buggar kommer vi se till att de inte
|
||||
innehåller någon som helst information om dig - bara om koden.
|
||||
</p>
|
||||
<h3>Insamling och användning av personlig information</h3>
|
||||
<p>
|
||||
All information som hämtas visas endast för inloggad användare.
|
||||
Informationen cacheas på den mobila enheten. Ingen information skickas
|
||||
från den mobila enheten eller lagras, analyseras eller processas någon
|
||||
annanstans.
|
||||
</p>
|
||||
<p>
|
||||
Inga tredjepartssystem har tillgång till någon del av informationen.
|
||||
</p>
|
||||
<h3>Loggning av data</h3>
|
||||
<p>
|
||||
För närvarande sker ingen loggning av data. Detta kan komma att
|
||||
ändras. Om så sker kommer loggad data att vara strikt begränsad till
|
||||
systeminformation såsom namn på mobil enhet och operativsystemversion
|
||||
samt information om eventuella fel som uppstått i användningen. Ingen
|
||||
personlig information härrörande från Skolplattformen kommer att
|
||||
samlas in.
|
||||
</p>
|
||||
<h3>Cookies</h3>
|
||||
<p>
|
||||
Cookies är filer med små mängder data som används för att identifiera
|
||||
användaren. Dessa används av Skolplattformen och skickas endast dit.
|
||||
Cookies sparas lokalt i enheten och rensas när en inloggad session
|
||||
avslutas.
|
||||
</p>
|
||||
<h3>Säkerhet</h3>
|
||||
<p>
|
||||
Vi har gjort vårt yttersta för att säkerställa säkerheten för din
|
||||
information. Detta innebär i praktiken att vi aldrig skickar vidare
|
||||
någon personlig data från din mobila enhet. All personlig information
|
||||
levereras från Skolplattformen och därmed är du i slutänden hänvisad
|
||||
till att lita på säkerheten i det systemet. I fall då vi, i arbetet
|
||||
med att bygga denna app, har upptäckt potentiella svagheter i
|
||||
Skolplattformen har vi vidtagit steg för att rapportera detta på ett
|
||||
ansvarsfullt sätt. Detta kommer vi göra även fortsättningsvis. Kom
|
||||
ihåg att elektronisk lagring och överföring över Internet aldrig kan
|
||||
garanteras vara 100% säker.
|
||||
</p>
|
||||
<h3>Integritet för barn</h3>
|
||||
<p>
|
||||
Appen läser information från system som hanterar barn under 13 år.
|
||||
Oavsett barnets ålder skickar vi ingen information vidare från din
|
||||
enhet. Den information du får tillgång via appen är samma som du når
|
||||
via Skolplattformen.
|
||||
</p>
|
||||
<h3>Förändringar av integritetspolicyn</h3>
|
||||
<p>
|
||||
Denna integritetspolicy kan komma att uppdateras. Eftersom vi inte
|
||||
samlar in någon information om våra användare kan vi tyvärr inte
|
||||
kontakta dig om så sker. Vi kommer dock informera om det i appen. Om
|
||||
du vill vara på den säkra sidan kan du återbesöka den här sidan då och
|
||||
då.
|
||||
</p>
|
||||
<p>
|
||||
Denna integritetspolicy gäller fr.o.m. 2024-04-29. Ändringar i denna
|
||||
policy finns dokumenterade på vår{' '}
|
||||
<Link.External href="https://github.com/kolplattformen/skolplattformen/">
|
||||
GitHub
|
||||
</Link.External>
|
||||
.
|
||||
</p>
|
||||
<h3>Kontakta oss</h3>
|
||||
<p>
|
||||
Tveka inte att kontakta oss om du har några frågor eller förslag till
|
||||
förbättringar av denna integritetspolicy. Skicka ett mail till{' '}
|
||||
<a href="mailto:dev@skolplattformen.org">dev@skolplattformen.org</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default PrivacyElevApp
|
|
@ -251,13 +251,11 @@ const QA = () => {
|
|||
de?
|
||||
</h3>
|
||||
<p>
|
||||
Appen kostar {price} kronor. Intäkten registreras i aktiebolaget Not Free
|
||||
Beer som ägs av tre av utvecklarna och går till att täcka kostnader
|
||||
för inköp. Det täcker inte på långa vägar den tid vi lagt ner. Med en
|
||||
låg engångskostnad ökar vi chansen att vi orkar syssla med underhåll
|
||||
och uppdateringar. Vi vill ju ha en stabil lösning som håller. Just nu
|
||||
jobbar vi på egen fritid med något som förbättrar det kommunen lagt en
|
||||
miljard av allmänna medel på.
|
||||
Vi har en Patreon där summan är synlig. Intäkten registreras i
|
||||
aktiebolaget Not Free Beer som ägs av tre av utvecklarna och går till
|
||||
att täcka kostnader för inköp. Det täcker inte på långa vägar den tid
|
||||
vi lagt ner. Just nu jobbar vi på egen fritid med något som förbättrar
|
||||
det kommunen lagt en miljard av allmänna medel på.
|
||||
</p>
|
||||
<h3>
|
||||
Är det moraliskt att tjäna pengar på något som kommunen borde erbjuda
|
||||
|
@ -311,13 +309,13 @@ const QA = () => {
|
|||
Det är en anspelning på hur GNU-projektet beskriver fri programvara:
|
||||
To understand the concept, you should think of “free” as in “free
|
||||
speech,” not as in “free beer”. Då vi har valt att tillgängliggöra all
|
||||
kod som öppen källkod (Apache 2.0) men ändå ta betalt för appen,
|
||||
tyckte vi att namnet var passande.
|
||||
kod som öppen källkod (Apache 2.0), tyckte vi att namnet var passande.
|
||||
</p>
|
||||
<h3>Kontakta oss</h3>
|
||||
<p>
|
||||
Tveka inte att kontakta oss. Skicka ett mail till{' '}
|
||||
<a href="mailto:info@skolplattformen.org">info@skolplattformen.org</a>.
|
||||
<a href="mailto:info@skolplattformen.org">info@skolplattformen.org</a>
|
||||
.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -16,13 +16,13 @@ const Status = () => {
|
|||
<ul>
|
||||
<li>Skicka en tweet 🥉</li>
|
||||
<li>
|
||||
<a href="https://github.com/kolplattformen/skolplattformen-app/issues">
|
||||
<a href="https://github.com/kolplattformen/skolplattformen/issues">
|
||||
Lägg en buggrapport här
|
||||
</a>{' '}
|
||||
🥈
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://github.com/kolplattformen/skolplattformen-app/pulls">
|
||||
<a href="https://github.com/kolplattformen/skolplattformen/pulls">
|
||||
Skicka en PR
|
||||
</a>{' '}
|
||||
🥇
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- web.yaml
|
|
@ -0,0 +1,93 @@
|
|||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: skolplattformen-web
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: skolplattformen-web
|
||||
namespace: skolplattformen-web
|
||||
spec:
|
||||
ports:
|
||||
- port: 3000
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app: skolplattformen-web
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: skolplattformen-web
|
||||
namespace: skolplattformen-web
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: skolplattformen-web
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: skolplattformen-web
|
||||
spec:
|
||||
containers:
|
||||
- name: skolplattformen-web
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 100Mi
|
||||
image: ghcr.io/kolplattformen/skolplattformen
|
||||
ports:
|
||||
- containerPort: 3000
|
||||
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: 3000
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: 3000
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: skolplattformen-web
|
||||
namespace: skolplattformen-web
|
||||
annotations:
|
||||
cert-manager.io/cluster-issuer: 'letsencrypt-prod'
|
||||
nginx.ingress.kubernetes.io/from-to-www-redirect: 'true'
|
||||
nginx.ingress.kubernetes.io/http2-push-preload: 'true'
|
||||
nginx.ingress.kubernetes.io/proxy-body-size: '500m'
|
||||
nginx.ingress.kubernetes.io/proxy-pass-headers: 'Location'
|
||||
nginx.ingress.kubernetes.io/configuration-snippet: |
|
||||
more_set_headers "X-Content-Type-Options: nosniff";
|
||||
more_set_headers "X-Frame-Options: DENY";
|
||||
more_set_headers "X-Xss-Protection: 0";
|
||||
more_set_headers "Strict-Transport-Security: max-age=31536000; includeSubDomains; preload";
|
||||
more_set_headers "Cross-Origin-Resource-Policy: same-site";
|
||||
more_set_headers "Referrer-Policy strict-origin";
|
||||
external-dns.alpha.kubernetes.io/hostname: new.skolplattformen.org.
|
||||
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
tls:
|
||||
- hosts:
|
||||
- skolplattformen.org
|
||||
- www.skolplattformen.org
|
||||
secretName: web-secret-tls
|
||||
rules:
|
||||
- host: skolplattformen.org
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: '/'
|
||||
backend:
|
||||
service:
|
||||
name: skolplattformen-web
|
||||
port:
|
||||
number: 3000
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "skolplattformen-site",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.4",
|
||||
"main": "index.js",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
import { NextPage } from 'next'
|
||||
import PrivacyElevApp from '../components/PrivacyElevApp'
|
||||
|
||||
const IntegrityElevAppPage: NextPage = () => {
|
||||
return <PrivacyElevApp />
|
||||
}
|
||||
|
||||
export default IntegrityElevAppPage
|
|
@ -0,0 +1,13 @@
|
|||
apiVersion: skaffold/v4beta1
|
||||
kind: Config
|
||||
metadata:
|
||||
name: skolplattformen-web
|
||||
build:
|
||||
artifacts:
|
||||
- image: skolplattformen/web
|
||||
context: .
|
||||
manifests:
|
||||
rawYaml:
|
||||
- k8s/web.yaml
|
||||
deploy:
|
||||
kubectl: {}
|
|
@ -49,7 +49,7 @@ For more information, please visit [CocoaPods Getting Started guide](https://gui
|
|||
|
||||
### Running on a device
|
||||
|
||||
The above command will automatically run your app on the iOS Simulator by default. If you want to run the app on an actual physical iOS device, please follow the instructions [here](https://reactnative.dev/docs/running-on-device.
|
||||
The above command will automatically run your app on the iOS Simulator by default. If you want to run the app on an actual physical iOS device, please follow the instructions [here](https://reactnative.dev/docs/running-on-device).
|
||||
|
||||
## Running the app
|
||||
|
||||
|
|
|
@ -1,29 +1,29 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`handles route calender 1`] = `"https://etjanst.stockholm.se/vardnadshavare/inloggad2/Calender/GetSchoolCalender?childId=123&rowLimit=50"`;
|
||||
exports[`handles route calender 1`] = `"https://etjanster.stockholm.se/vardnadshavare/inloggad2/Calender/GetSchoolCalender?childId=123&rowLimit=50"`;
|
||||
|
||||
exports[`handles route children 1`] = `"https://etjanst.stockholm.se/vardnadshavare/inloggad2/GetChildren"`;
|
||||
exports[`handles route children 1`] = `"https://etjanster.stockholm.se/vardnadshavare/inloggad2/GetChildren"`;
|
||||
|
||||
exports[`handles route classmates 1`] = `"https://etjanst.stockholm.se/vardnadshavare/inloggad2/contacts/GetStudentsByClass?studentId=123"`;
|
||||
exports[`handles route classmates 1`] = `"https://etjanster.stockholm.se/vardnadshavare/inloggad2/contacts/GetStudentsByClass?studentId=123"`;
|
||||
|
||||
exports[`handles route image 1`] = `"https://etjanst.stockholm.se/vardnadshavare/inloggad2/NewsBanner?url=https://example.com/img.png"`;
|
||||
exports[`handles route image 1`] = `"https://etjanster.stockholm.se/vardnadshavare/inloggad2/NewsBanner?url=https://example.com/img.png"`;
|
||||
|
||||
exports[`handles route login with personal number 1`] = `"https://login003.stockholm.se/NECSadcmbid/authenticate/NECSadcmbid?TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvaGVt&initialize=bankid&personalNumber=201701012393&_=1618404258782"`;
|
||||
exports[`handles route login with personal number 1`] = `"https://login003.stockholm.se/NECSadcmbid/authenticate/NECSadcmbid?TYPE=33554433&REALMOID=06-42f40edd-0c5b-4dbc-b714-1be1e907f2de&GUID=1&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0ZXIuc3RvY2tob2xtLnNlL3ZhcmRuYWRzaGF2YXJlL2lubG9nZ2FkMi9oZW0%3d&initialize=bankid&personalNumber=201701012393&_=1618404258782"`;
|
||||
|
||||
exports[`handles route login without personal number 1`] = `"https://login003.stockholm.se/NECSadcmbid/authenticate/NECSadcmbid?TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvaGVt&initialize=bankid&_=1618404258782"`;
|
||||
exports[`handles route login without personal number 1`] = `"https://login003.stockholm.se/NECSadcmbid/authenticate/NECSadcmbid?TYPE=33554433&REALMOID=06-42f40edd-0c5b-4dbc-b714-1be1e907f2de&GUID=1&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0ZXIuc3RvY2tob2xtLnNlL3ZhcmRuYWRzaGF2YXJlL2lubG9nZ2FkMi9oZW0%3d&initialize=bankid&_=1618404258782"`;
|
||||
|
||||
exports[`handles route menuChoice 1`] = `"https://etjanst.stockholm.se/vardnadshavare/inloggad2/Matsedel/GetMatsedelChoice?childId=123"`;
|
||||
exports[`handles route menuChoice 1`] = `"https://etjanster.stockholm.se/vardnadshavare/inloggad2/Matsedel/GetMatsedelChoice?childId=123"`;
|
||||
|
||||
exports[`handles route menuList 1`] = `"https://etjanst.stockholm.se/vardnadshavare/inloggad2/Matsedel/GetMatsedelList?childId=123"`;
|
||||
exports[`handles route menuList 1`] = `"https://etjanster.stockholm.se/vardnadshavare/inloggad2/Matsedel/GetMatsedelList?childId=123"`;
|
||||
|
||||
exports[`handles route menuRss 1`] = `"https://etjanst.stockholm.se/vardnadshavare/inloggad2/Matsedel/GetMatsedelRSS?childId=123"`;
|
||||
exports[`handles route menuRss 1`] = `"https://etjanster.stockholm.se/vardnadshavare/inloggad2/Matsedel/GetMatsedelRSS?childId=123"`;
|
||||
|
||||
exports[`handles route news 1`] = `"https://etjanst.stockholm.se/vardnadshavare/inloggad2/News/GetNewsArchive?bannerImageLimit=5000&childId=123"`;
|
||||
exports[`handles route news 1`] = `"https://etjanster.stockholm.se/vardnadshavare/inloggad2/News/GetNewsArchive?bannerImageLimit=5000&childId=123"`;
|
||||
|
||||
exports[`handles route newsDetails 1`] = `"https://etjanst.stockholm.se/vardnadshavare/inloggad2/News/GetNewsArticle?newsItemId=321&childId=123"`;
|
||||
exports[`handles route newsDetails 1`] = `"https://etjanster.stockholm.se/vardnadshavare/inloggad2/News/GetNewsArticle?newsItemId=321&childId=123"`;
|
||||
|
||||
exports[`handles route notifications 1`] = `"https://etjanst.stockholm.se/vardnadshavare/inloggad2/notifications/getnotifications?childId=123"`;
|
||||
exports[`handles route notifications 1`] = `"https://etjanster.stockholm.se/vardnadshavare/inloggad2/notifications/getnotifications?childId=123"`;
|
||||
|
||||
exports[`handles route schedule 1`] = `"https://etjanst.stockholm.se/vardnadshavare/inloggad2/Calender/GetSchema?childId=123&startDate=2021-01-01&endDate=2021-01-01"`;
|
||||
exports[`handles route schedule 1`] = `"https://etjanster.stockholm.se/vardnadshavare/inloggad2/Calender/GetSchema?childId=123&startDate=2021-01-01&endDate=2021-01-01"`;
|
||||
|
||||
exports[`handles route user 1`] = `"https://etjanst.stockholm.se/vardnadshavare/base/getuserdata"`;
|
||||
exports[`handles route user 1`] = `"https://etjanster.stockholm.se/vardnadshavare/base/getuserdata"`;
|
||||
|
|
|
@ -44,8 +44,9 @@ describe('api', () => {
|
|||
token: '9462cf77-bde9-4029-bb41-e599f3094613',
|
||||
order: '5fe57e4c-9ad2-4b52-b794-48adef2f6663',
|
||||
}
|
||||
const pending = { state: 'PENDING' }
|
||||
response.json.mockResolvedValue(data)
|
||||
response.text.mockResolvedValue('PENDING')
|
||||
response.json.mockResolvedValue(pending)
|
||||
|
||||
const personalNumber = 'my personal number'
|
||||
api.login(personalNumber).then((status) => {
|
||||
|
@ -60,14 +61,16 @@ describe('api', () => {
|
|||
token: '9462cf77-bde9-4029-bb41-e599f3094613',
|
||||
order: '5fe57e4c-9ad2-4b52-b794-48adef2f6663',
|
||||
}
|
||||
const pending = { state: 'PENDING' }
|
||||
const ok = { state: 'OK' }
|
||||
response.json.mockResolvedValue(data)
|
||||
response.text.mockResolvedValueOnce('PENDING')
|
||||
response.text.mockResolvedValueOnce('OK')
|
||||
response.json.mockResolvedValueOnce(pending)
|
||||
response.json.mockResolvedValueOnce(ok)
|
||||
|
||||
const personalNumber = 'my personal number'
|
||||
api.login(personalNumber).then((status) => {
|
||||
status.on('OK', () => {
|
||||
expect(fetch).toHaveBeenCalledTimes(4)
|
||||
expect(fetch).toHaveBeenCalledTimes(3)
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
@ -89,8 +92,9 @@ describe('api', () => {
|
|||
token: '9462cf77-bde9-4029-bb41-e599f3094613',
|
||||
order: '5fe57e4c-9ad2-4b52-b794-48adef2f6663',
|
||||
}
|
||||
const error = { state: 'ERROR' }
|
||||
response.json.mockResolvedValue(data)
|
||||
response.text.mockResolvedValueOnce('ERROR')
|
||||
response.json.mockResolvedValue(error)
|
||||
|
||||
const personalNumber = 'my personal number'
|
||||
api.login(personalNumber).then((status) => {
|
||||
|
|
|
@ -44,12 +44,12 @@ const s24Init = {
|
|||
headers: {
|
||||
accept: 'application/json, text/javascript, */*; q=0.01',
|
||||
referer:
|
||||
'https://fns.stockholm.se/ng/timetable/timetable-viewer/fns.stockholm.se/',
|
||||
'https://websthlm.skola24.se/ng/timetable/timetable-viewer/fns.stockholm.se/',
|
||||
'accept-language': 'en-US,en;q=0.9,sv;q=0.8',
|
||||
'cache-control': 'no-cache',
|
||||
'content-type': 'application/json',
|
||||
pragma: 'no-cache',
|
||||
host: 'fns.stockholm.se',
|
||||
host: 'websthlm.skola24.se',
|
||||
'x-scope': '8a22163c-8662-4535-9050-bc5e1923df48',
|
||||
},
|
||||
}
|
||||
|
@ -307,9 +307,9 @@ export class ApiSkolplattformen extends EventEmitter implements Api {
|
|||
const url = routes.children
|
||||
const session = this.getRequestInit({
|
||||
headers: {
|
||||
Accept: 'application/json;odata=verbose',
|
||||
Host: 'etjanst.stockholm.se',
|
||||
Referer: 'https://etjanst.stockholm.se/vardnadshavare/inloggad2/hem',
|
||||
Accept: 'application/json, text/plain, */*',
|
||||
Host: 'etjanster.stockholm.se',
|
||||
Referer: 'https://etjanster.stockholm.se/vardnadshavare/inloggad2/hem',
|
||||
},
|
||||
})
|
||||
const response = await this.fetch('children', url, session)
|
||||
|
@ -570,7 +570,7 @@ export class ApiSkolplattformen extends EventEmitter implements Api {
|
|||
await this.ssoAuthorize('TimetableViewer')
|
||||
const body = {
|
||||
getPersonalTimetablesRequest: {
|
||||
hostName: 'fns.stockholm.se',
|
||||
hostName: 'stockholm.skola24.se',
|
||||
},
|
||||
}
|
||||
const session = this.getRequestInit({
|
||||
|
@ -586,7 +586,6 @@ export class ApiSkolplattformen extends EventEmitter implements Api {
|
|||
getPersonalTimetablesResponse: { childrenTimetables },
|
||||
},
|
||||
} = await response.json()
|
||||
|
||||
return childrenTimetables as Skola24Child[]
|
||||
}
|
||||
|
||||
|
@ -619,7 +618,7 @@ export class ApiSkolplattformen extends EventEmitter implements Api {
|
|||
customerKey: '',
|
||||
endDate: null,
|
||||
height: 1063,
|
||||
host: 'fns.stockholm.se',
|
||||
host: 'stockholm.skola24.se',
|
||||
periodText: '',
|
||||
privateFreeTextMode: null,
|
||||
privateSelectionMode: true,
|
||||
|
@ -633,6 +632,7 @@ export class ApiSkolplattformen extends EventEmitter implements Api {
|
|||
week,
|
||||
width: 1227,
|
||||
year,
|
||||
schoolYear: 'b976f986-4308-4583-b39e-2d3933094eb2',
|
||||
}
|
||||
const session = this.getRequestInit({
|
||||
...s24Init,
|
||||
|
|
|
@ -21,13 +21,13 @@ export class Checker extends EventEmitter implements LoginStatusChecker {
|
|||
|
||||
async check(): Promise<void> {
|
||||
const response = await this.fetcher('login-status', this.url)
|
||||
const status = await response.text()
|
||||
this.emit(status)
|
||||
const status = await response.json()
|
||||
this.emit(status.state)
|
||||
if (
|
||||
!this.cancelled &&
|
||||
status !== 'OK' &&
|
||||
status !== 'ERROR!' &&
|
||||
status !== 'CANCELLED'
|
||||
status.state !== 'OK' &&
|
||||
status.state !== 'ERROR' &&
|
||||
status.state !== 'CANCELLED'
|
||||
) {
|
||||
setTimeout(() => this.check(), 1000)
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ describe('news', () => {
|
|||
)
|
||||
expect(item.imageUrl).toEqual('A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg')
|
||||
expect(item.fullImageUrl).toEqual(
|
||||
'https://etjanst.stockholm.se/Vardnadshavare/inloggad2/NewsBanner?url=A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg'
|
||||
'https://etjanster.stockholm.se/Vardnadshavare/inloggad2/NewsBanner?url=A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg'
|
||||
)
|
||||
expect(item.imageAltText).toEqual('Nyhetsbild. Bildtext ej tillgänglig.')
|
||||
expect(item.intro).toEqual(
|
||||
|
|
|
@ -2,7 +2,7 @@ import { NewsItem, parseDate, toMarkdown } from '@skolplattformen/api'
|
|||
import { etjanst } from './etjanst'
|
||||
|
||||
const IMAGE_HOST =
|
||||
'https://etjanst.stockholm.se/Vardnadshavare/inloggad2/NewsBanner?url='
|
||||
'https://etjanster.stockholm.se/Vardnadshavare/inloggad2/NewsBanner?url='
|
||||
|
||||
export const newsItem = ({
|
||||
newsId,
|
||||
|
@ -27,7 +27,7 @@ export const newsItem = ({
|
|||
body: toNonEmptyMarkdownString(body),
|
||||
})
|
||||
|
||||
// Fixes https://github.com/kolplattformen/skolplattformen-app/issues/525
|
||||
// Fixes https://github.com/kolplattformen/skolplattformen/issues/525
|
||||
const toNonEmptyMarkdownString = (str: string): string => {
|
||||
const res = toMarkdown(str)
|
||||
if (res?.length == 0) return ' '
|
||||
|
|
|
@ -1,29 +1,28 @@
|
|||
// BankId
|
||||
export const login = (personalNumber?: string) => {
|
||||
const baseUrl =
|
||||
'https://login003.stockholm.se/NECSadcmbid/authenticate/NECSadcmbid?TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvaGVt'
|
||||
'https://login003.stockholm.se/NECSadcmbid/authenticate/NECSadcmbid?TYPE=33554433&REALMOID=06-42f40edd-0c5b-4dbc-b714-1be1e907f2de&GUID=1&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0ZXIuc3RvY2tob2xtLnNlL3ZhcmRuYWRzaGF2YXJlL2lubG9nZ2FkMi9oZW0%3d'
|
||||
const optionalPersonalNumber =
|
||||
personalNumber === undefined ? '' : `&personalNumber=${personalNumber}`
|
||||
return `${baseUrl}&initialize=bankid${optionalPersonalNumber}&_=${Date.now()}`
|
||||
}
|
||||
|
||||
export const loginStatus = (order: string) =>
|
||||
`https://login003.stockholm.se/NECSadcmbid/authenticate/NECSadcmbid?TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvaGVt&verifyorder=${order}&_=${Date.now()}`
|
||||
|
||||
`https://login003.stockholm.se/NECSadcmbid/authenticate/NECSadcmbid?TYPE=33554433&REALMOID=06-42f40edd-0c5b-4dbc-b714-1be1e907f2de&GUID=1&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0ZXIuc3RvY2tob2xtLnNlL3ZhcmRuYWRzaGF2YXJlL2lubG9nZ2FkMi9oZW0%3d&verifyorder=${order}&_=${Date.now()}`
|
||||
export const loginCookie =
|
||||
'https://login003.stockholm.se/NECSadcmbid/authenticate/SiteMinderAuthADC?TYPE=33554433&REALMOID=06-42f40edd-0c5b-4dbc-b714-1be1e907f2de&GUID=&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvR2V0Q2hpbGRyZW4%3d'
|
||||
'https://login003.stockholm.se/NECSadcmbid/authenticate/SiteMinderAuthADC?TYPE=33554433&REALMOID=06-42f40edd-0c5b-4dbc-b714-1be1e907f2de&GUID=1&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0ZXIuc3RvY2tob2xtLnNlL3ZhcmRuYWRzaGF2YXJlL2lubG9nZ2FkMi9oZW0%3d'
|
||||
|
||||
// Freja
|
||||
export const frejaLogin =
|
||||
'https://login003.stockholm.se/NECSadcfreja/authenticate/NECSadcfreja?action=init&return_url=https%3A%2F%2Flogin003.stockholm.se%2FNECSadcfreja%2Fauthenticate%2FNECSadcfreja'
|
||||
export const frejaLoginStatus =
|
||||
'https://login003.stockholm.se/NECSadcfreja/authenticate/NECSadcfreja?TYPE=33554433&REALMOID=06-89cf916c-9764-45fa-8690-eaf3fe9282bc&GUID=1&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2ffreja%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvaGVt&action=checkstatus'
|
||||
'https://login003.stockholm.se/NECSadcfreja/authenticate/NECSadcfreja?TYPE=33554433&REALMOID=06-89cf916c-9764-45fa-8690-eaf3fe9282bc&GUID=1&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2ffreja%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0ZXIuc3RvY2tob2xtLnNlL3ZhcmRuYWRzaGF2YXJlL2lubG9nZ2FkMi9oZW0%3d&action=checkstatus'
|
||||
export const frejaReturnUrl =
|
||||
'https://login003.stockholm.se/NECSadcfreja/authenticate/NECSadcfreja?TYPE=33554433&REALMOID=06-89cf916c-9764-45fa-8690-eaf3fe9282bc&GUID=&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2ffreja%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvT3ZlcnNpa3Q%3d'
|
||||
'https://login003.stockholm.se/NECSadcfreja/authenticate/NECSadcfreja?TYPE=33554433&REALMOID=06-89cf916c-9764-45fa-8690-eaf3fe9282bc&GUID=1&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2ffreja%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0ZXIuc3RvY2tob2xtLnNlL3ZhcmRuYWRzaGF2YXJlL2lubG9nZ2FkMi9oZW0%3d'
|
||||
export const frejaLoginCookie =
|
||||
'https://login003.stockholm.se/NECSadcfreja/authenticate/SiteMinderAuthADCFREJA?TYPE=33554433&REALMOID=06-89cf916c-9764-45fa-8690-eaf3fe9282bc&GUID=&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2ffreja%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvT3ZlcnNpa3Q%3d'
|
||||
'https://login003.stockholm.se/NECSadcfreja/authenticate/SiteMinderAuthADCFREJA?TYPE=33554433&REALMOID=06-89cf916c-9764-45fa-8690-eaf3fe9282bc&GUID=1&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2ffreja%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0ZXIuc3RvY2tob2xtLnNlL3ZhcmRuYWRzaGF2YXJlL2lubG9nZ2FkMi9oZW0%3d'
|
||||
|
||||
const urlLoggedIn = `https://etjanst.stockholm.se/vardnadshavare/inloggad2`
|
||||
const urlLoggedIn = `https://etjanster.stockholm.se/vardnadshavare/inloggad2`
|
||||
|
||||
export const children = `${urlLoggedIn}/GetChildren`
|
||||
|
||||
|
@ -40,7 +39,7 @@ export const schoolContacts = (childId: string, schoolId: string) =>
|
|||
`${urlLoggedIn}/contacts/GetSchoolContacts?schoolId=${schoolId}&studentId=${childId}&schoolForm=Klasslista`
|
||||
|
||||
export const user =
|
||||
'https://etjanst.stockholm.se/vardnadshavare/base/getuserdata'
|
||||
'https://etjanster.stockholm.se/vardnadshavare/base/getuserdata'
|
||||
|
||||
export const news = (childId: string) =>
|
||||
`${urlLoggedIn}/News/GetNewsArchive?bannerImageLimit=5000&childId=${childId}`
|
||||
|
@ -65,43 +64,43 @@ export const menuChoice = (childId: string) =>
|
|||
export const schedule = (childId: string, fromDate: string, endDate: string) =>
|
||||
`${urlLoggedIn}/Calender/GetSchema?childId=${childId}&startDate=${fromDate}&endDate=${endDate}`
|
||||
|
||||
export const cdn = 'https://etjanst.stockholm.se/vardnadshavare/base/cdn'
|
||||
export const cdn = 'https://etjanster.stockholm.se/vardnadshavare/base/cdn'
|
||||
|
||||
export const auth = 'https://etjanst.stockholm.se/vardnadshavare/base/auth'
|
||||
export const auth = 'https://etjanster.stockholm.se/vardnadshavare/base/auth'
|
||||
|
||||
export const startBundle =
|
||||
'https://etjanst.stockholm.se/vardnadshavare/bundles/start'
|
||||
'https://etjanster.stockholm.se/vardnadshavare/bundles/start'
|
||||
|
||||
export const hemPage =
|
||||
'https://etjanst.stockholm.se/vardnadshavare/inloggad2/hem'
|
||||
'https://etjanster.stockholm.se/vardnadshavare/inloggad2/hem'
|
||||
|
||||
export const navigationControllerScript =
|
||||
'https://etjanst.stockholm.se/vardnadshavare/bundles/navigationController'
|
||||
'https://etjanster.stockholm.se/vardnadshavare/bundles/navigationController'
|
||||
|
||||
export const baseEtjanst = 'https://etjanst.stockholm.se'
|
||||
export const baseEtjanst = 'https://etjanster.stockholm.se'
|
||||
|
||||
export const childcontrollerScript = `https://etjanst.stockholm.se/vardnadshavare/bundles/childcontroller?v=${Date.now()}`
|
||||
export const childcontrollerScript = `https://etjanster.stockholm.se/vardnadshavare/bundles/childcontroller?v=${Date.now()}`
|
||||
|
||||
export const createItemConfig =
|
||||
'https://raw.githubusercontent.com/kolplattformen/embedded-api/main/config.json'
|
||||
|
||||
// Skola24
|
||||
export const ssoRequestUrl = (targetSystem: string) =>
|
||||
`https://fnsservicesso1.stockholm.se/sso-ng/saml-2.0/authenticate?customer=https://login001.stockholm.se&targetsystem=${targetSystem}`
|
||||
`https://stockholm-sso.skola24.se/nssso/saml-2.0/authenticate?customer=https://login001.stockholm.se&targetsystem=${targetSystem}`
|
||||
|
||||
export const ssoResponseUrl =
|
||||
'https://login001.stockholm.se/affwebservices/public/saml2sso'
|
||||
export const samlResponseUrl =
|
||||
'https://fnsservicesso1.stockholm.se/sso-ng/saml-2.0/response'
|
||||
'https://stockholm-sso.skola24.se/nssso/saml-2.0/response'
|
||||
|
||||
export const timetables =
|
||||
'https://fns.stockholm.se/ng/api/services/skola24/get/personal/timetables'
|
||||
'https://websthlm.skola24.se/api/services/skola24/get/personal/timetables'
|
||||
export const renderKey =
|
||||
'https://fns.stockholm.se/ng/api/get/timetable/render/key'
|
||||
export const timetable = 'https://fns.stockholm.se/ng/api/render/timetable'
|
||||
'https://websthlm.skola24.se/api/get/timetable/render/key'
|
||||
export const timetable = 'https://websthlm.skola24.se/api/render/timetable'
|
||||
|
||||
export const topologyConfigUrl =
|
||||
'https://fantomenkrypto.vercel.app/api/getConfig'
|
||||
|
||||
export const selectChild =
|
||||
'https://etjanst.stockholm.se/vardnadshavare/inloggad2/SelectChild'
|
||||
'https://etjanster.stockholm.se/vardnadshavare/inloggad2/SelectChild'
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "skolplattformen",
|
||||
"version": "2.15.5",
|
||||
"version": "2.17.0",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"start": "nx start",
|
||||
|
@ -70,7 +70,7 @@
|
|||
"react-native-simple-toast": "1.1.3",
|
||||
"react-native-svg": "12.1.1",
|
||||
"react-native-typography": "1.4.1",
|
||||
"react-native-webview": "^11.15.0",
|
||||
"react-native-webview": "^11.26.1",
|
||||
"react-redux": "^7.2.3",
|
||||
"redux": "^4.0.5",
|
||||
"regenerator-runtime": "^0.13.9",
|
||||
|
|
|
@ -11132,10 +11132,10 @@ react-native-typography@1.4.1:
|
|||
resolved "https://registry.yarnpkg.com/react-native-typography/-/react-native-typography-1.4.1.tgz#2d05cb5935a2f7fdb6b43bbde93d60f1324578e3"
|
||||
integrity sha512-dc9Zfs4jUdq4ygx4/KwO6jKTERBu6cRrfPJGntw/pA+D6BMjlWfMNuhZ/69vf4Zpsnt9s4AGe+Z/V1QFYaCXAA==
|
||||
|
||||
react-native-webview@^11.15.0:
|
||||
version "11.15.0"
|
||||
resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-11.15.0.tgz#b5aea9da579ca17fb9fd324e5202b1b5b8ce9fa8"
|
||||
integrity sha512-0Wv+8qu8XuACx1xZwzc2Yfl+rOvxUouLcPxUKdkhaMVNpwoM5/ePpczCQZ3LpiRnSoEtjaUkfyQHbJQ+x4dDJQ==
|
||||
react-native-webview@^12.1.0:
|
||||
version "12.4.0"
|
||||
resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-12.4.0.tgz#421db8e5601b4851c5796c5d4736b6b8439d1469"
|
||||
integrity sha512-wYzTfNADidmqv6bY+x6NUfX8+uBR9mmF1CO1NOvY4oD2vv+D4rA0XwcwAe2D7RevXUy3fmuTT93kFQcgo8fEhg==
|
||||
dependencies:
|
||||
escape-string-regexp "2.0.0"
|
||||
invariant "2.2.4"
|
||||
|
|
Loading…
Reference in New Issue