diff --git a/.gitignore b/.gitignore
index 93b034fd6..2cfa84c0e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,7 +39,7 @@ vendor-php
.php-cs-fixer.cache
suite-logs
-# QA activity reports
+# QA activity reports
tests/qa-activity-report/reports/
# drone CI is in .drone.star, do not let someone accidentally commit a local .drone.yml
@@ -60,3 +60,4 @@ go.work
go.work.sum
.env
.envrc
+.DS_Store
diff --git a/services/idp/Makefile b/services/idp/Makefile
index c20ccecc4..e3f4d94dc 100644
--- a/services/idp/Makefile
+++ b/services/idp/Makefile
@@ -32,7 +32,9 @@ ci-node-generate: assets
.PHONY: assets
assets: pnpm-build \
assets/identifier/static \
- assets/identifier/static/favicon.ico
+ assets/identifier/static/favicon.ico \
+ assets/identifier/static/icon-lilac.svg
+
assets/identifier/static:
mkdir -p assets/identifier/static
@@ -41,6 +43,10 @@ assets/identifier/static:
assets/identifier/static/favicon.ico:
cp src/images/favicon.ico assets/identifier/static/favicon.ico
+.PHONY: assets/identifier/static/icon-lilac.svg
+assets/identifier/static/icon-lilac.svg:
+ cp src/images/icon-lilac.svg assets/identifier/static/icon-lilac.svg
+
.PHONY: pnpm-build
pnpm-build: node_modules
#pnpm lint #TODO: activate
diff --git a/services/idp/src/App.jsx b/services/idp/src/App.jsx
index a4da3a6dd..7aa7a8344 100644
--- a/services/idp/src/App.jsx
+++ b/services/idp/src/App.jsx
@@ -1,69 +1,75 @@
-import React, { ReactElement, Suspense, lazy, useState, useEffect } from 'react';
+import React, {ReactElement, Suspense, lazy, useState, useEffect} from 'react';
import PropTypes from 'prop-types';
-import { MuiThemeProvider } from '@material-ui/core/styles';
-import { defaultTheme } from 'kpop/es/theme';
+import {MuiThemeProvider} from '@material-ui/core/styles';
+import {defaultTheme} from 'kpop/es/theme';
import 'kpop/static/css/base.css';
import 'kpop/static/css/scrollbar.css';
import Spinner from './components/Spinner';
import * as version from './version';
-import { OpenCloudContext } from './openCloudContext';
+import {OpenCloudContext} from './openCloudContext';
const LazyMain = lazy(() => import(/* webpackChunkName: "identifier-main" */ './Main'));
console.info(`Kopano Identifier build version: ${version.build}`); // eslint-disable-line no-console
const App = ({ bgImg }): ReactElement => {
- const [theme, setTheme] = useState(null);
- const [config, setConfig] = useState(null);
- const [loading, setLoading] = useState(true);
+ const [theme, setTheme] = useState(null);
+ const [config, setConfig] = useState(null);
+ const [loading, setLoading] = useState(true);
- useEffect(() => {
- const fetchData = async () => {
- try {
- const configResponse = await fetch('/config.json');
- const configData = await configResponse.json();
- setConfig(configData);
+ useEffect(() => {
+ const fetchData = async () => {
+ try {
+ const configResponse = await fetch('/config.json');
+ const configData = await configResponse.json();
+ setConfig(configData);
- const themeResponse = await fetch(configData.theme);
- const themeData = await themeResponse.json();
- setTheme(themeData);
- } catch (error) {
- console.error('Error fetching config/theme data:', error);
- } finally {
- setLoading(false);
- }
- };
+ const themeResponse = await fetch(configData.theme);
+ const themeData = await themeResponse.json();
+ setTheme(themeData);
+ } catch (error) {
+ console.error('Error fetching config/theme data:', error);
+ } finally {
+ setLoading(false);
+ }
+ };
- fetchData();
- }, []);
+ fetchData();
+ }, []);
- if (loading) {
- return ;
- }
+ if (loading) {
+ return ;
+ }
- return (
-
-
-
- }>
-
-
-
-
-
- );
+ return (
+
+
+
+ }>
+
+
+
+ {!bgImg &&
+

+ }
+
+
+ );
}
App.propTypes = {
- bgImg: PropTypes.string
+ bgImg: PropTypes.string
};
export default App;
diff --git a/services/idp/src/app.css b/services/idp/src/app.css
index 77cced37e..74ba6bd75 100644
--- a/services/idp/src/app.css
+++ b/services/idp/src/app.css
@@ -1,151 +1,194 @@
/* additional css on top of kpop */
@font-face {
- font-family: OpenCloud;
- src: url('./fonts/OpenCloud500-Regular.woff2') format('woff2');
- font-weight: normal;
- font-style: normal;
+ font-family: OpenCloud;
+ src: url('./fonts/OpenCloud500-Regular.woff2') format('woff2');
+ font-weight: normal;
+ font-style: normal;
}
+
@font-face {
- font-family: OpenCloud;
- src: url('./fonts/OpenCloud750-Bold.woff2') format('woff2');
- font-weight: bold;
- font-style: normal;
+ font-family: OpenCloud;
+ src: url('./fonts/OpenCloud750-Bold.woff2') format('woff2');
+ font-weight: bold;
+ font-style: normal;
}
html {
- font-feature-settings: "cv11";
+ font-feature-settings: "cv11";
+ color: #20434f !important;
}
body {
- font-family: OpenCloud, sans-serif;
+ font-family: OpenCloud, sans-serif;
}
strong {
- font-weight: 600;
+ font-weight: 600;
+}
+
+.oc-font-weight-light {
+ font-weight: 300;
}
.oc-login-bg {
- background-image: url(./images/background.png);
- background-size: cover;
- background-repeat: no-repeat;
- background-position: center;
- z-index: 0;
- display: flex;
- width: 100%;
+ background: #20434F;
+ display: flex;
+ width: 100%;
+}
+
+.oc-login-bg-icon {
+ position: fixed;
+ right: -3vw;
+ bottom: -3vh;
+ height: 50vh;
+ z-index: 0;
+}
+
+.oc-login-bg-image {
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center;
}
#loader {
- /* NOTE(longsleep): White here needed because of the background image */
- color: white;
- text-shadow: #000 0 0 1px;
+ /* NOTE(longsleep): White here needed because of the background image */
+ color: white;
+ text-shadow: #000 0 0 1px;
}
.oc-logo {
- position: absolute;
- top: -130px;
- left: 50%;
- height: 80px;
- transform: translateX(-50%);
+ height: 80px;
+ z-index: 0;
+ margin-bottom: 40px;
}
.oc-progress {
- /* Needs to be important to overwrite material-ui */
- background-color: rgba(78, 133, 200, 0.8) !important;
- height: 4px;
- width: 100px;
+ /* Needs to be important to overwrite material-ui */
+ background-color: rgba(78, 133, 200, 0.8) !important;
+ height: 4px;
+ width: 100px;
}
.oc-progress > div {
- /* Needs to be important to overwrite material-ui */
- background-color: #4a76ac !important;
+ /* Needs to be important to overwrite material-ui */
+ background-color: #4a76ac !important;
}
.oc-input {
- background-color: #fff;
- border: 1px solid #fff;
- border-radius: 3px;
- height: 40px;
- width: 300px;
- padding: 16px;
- box-sizing: border-box;
- font-size: 1rem;
+ border: 1px solid #20434f;
+ border-radius: 4px;
+ height: 45px;
+ width: 100%;
+ padding: 16px;
+ box-sizing: border-box;
+ font-size: 1rem;
}
.oc-label {
- color: #fff;
- display: inline-block;
- margin-bottom: 5px;
+ display: block;
+ margin-bottom: 12px;
+ font-weight: 700;
}
.oc-input.error {
- outline: none;
- border: 1px solid #fe4600;
+ outline: none;
+ border: 1px solid #fe4600;
}
.MuiTypography-colorError {
- color: #fe4600 !important;
+ color: #fe4600 !important;
}
.oc-input:focus {
- outline: none;
- border: 1px solid #fff;
+ outline: 2px solid #e2baff;
+ border: 1px solid #fff;
}
.oc-input + .oc-input {
- margin-top: 15px;
+ margin-top: 15px;
}
.MuiTouchRipple-root {
- display: none !important;
+ display: none !important;
+}
+
+.oc-card {
+ background: white;
+ display: inline-flex;
+ width: 500px;
+}
+
+.oc-card-body {
+ padding: 40px;
+ width: 100%;
}
.oc-button {
- /* Needs to be important to overwrite material-ui */
- font-size: 1.0625rem !important;
+ /* Needs to be important to overwrite material-ui */
+ font-size: 1.0625rem !important;
+ border-radius: 100px !important;
+ box-shadow: none !important;
+ font-weight: 700 !important;
}
.oc-button-primary {
- /* Needs to be important to overwrite material-ui */
- width: 100%;
- background: #e2baff !important;
- border: 1px solid transparent !important;
- color: #19353f !important;
+ /* Needs to be important to overwrite material-ui */
+ width: 100%;
+ background: #e2baff !important;
+ border-radius: 100px !important;
+ color: #20434f !important;
+ box-shadow: none !important;
+ font-weight: 700 !important;
}
-.oc-checkbox-dark svg {
- /* Needs to be important to overwrite material-ui */
- fill: white !important;
+.oc-button-secondary {
+ /* Needs to be important to overwrite material-ui */
+ width: 100%;
+ border-radius: 100px !important;
+ background: #F1F3F4 !important;
+ color: #20434f !important;
+ box-shadow: none !important;
}
.oc-footer-message {
- color: white;
- padding: 10px;
- font-size: 0.8rem;
+ color: white;
+ padding: 10px;
+ font-size: 0.8rem;
}
@media only screen and (max-width: 768px) {
- .oc-logo {
- height: 60px;
- top: -90px;
- }
+ .oc-logo {
+ height: 60px;
+ top: -90px;
+ }
+
+ .oc-login-bg-icon {
+ display: none;
+ }
+
+ .oc-card {
+ min-width: 50vw !important;
+ }
+}
+
+@media only screen and (max-width: 600px) {
+ .oc-card {
+ width: 100vw !important;
+ }
}
/* Helpers */
.oc-mt-l {
- margin-top: 24px !important;
+ margin-top: 24px !important;
}
.oc-mb-m {
- margin-bottom: 20px !important;
-}
-
-.oc-light {
- color: #fff !important;
+ margin-bottom: 20px !important;
}
.oc-login-form div:not(:last-of-type) {
- margin-bottom: 15px;
+ margin-bottom: 20px;
}
@@ -154,14 +197,14 @@ strong {
* Used to hide an element visually, but keeping it accessible for accessibility tools.
*/
.oc-invisible-sr {
- border: 0 !important;
- clip: rect(1px, 1px, 1px, 1px) !important;
- height: 1px !important;
- overflow: hidden !important;
- padding: 0 !important;
- /* Need to make sure we override any existing styles. */
- position: absolute !important;
- top: 0;
- white-space: nowrap;
- width: 1px !important;
+ border: 0 !important;
+ clip: rect(1px, 1px, 1px, 1px) !important;
+ height: 1px !important;
+ overflow: hidden !important;
+ padding: 0 !important;
+ /* Need to make sure we override any existing styles. */
+ position: absolute !important;
+ top: 0;
+ white-space: nowrap;
+ width: 1px !important;
}
diff --git a/services/idp/src/components/Loading.jsx b/services/idp/src/components/Loading.jsx
index 42f024115..cbd5f9bd1 100644
--- a/services/idp/src/components/Loading.jsx
+++ b/services/idp/src/components/Loading.jsx
@@ -24,7 +24,7 @@ class Loading extends React.PureComponent {
))}
{renderIf(error !== null)(() => (
-
+
{t("konnect.loading.error.headline", "Failed to connect to server")}
diff --git a/services/idp/src/components/ResponsiveScreen.jsx b/services/idp/src/components/ResponsiveScreen.jsx
index 6be841775..cec79a7a3 100644
--- a/services/idp/src/components/ResponsiveScreen.jsx
+++ b/services/idp/src/components/ResponsiveScreen.jsx
@@ -15,10 +15,13 @@ const styles = theme => ({
root: {
display: 'flex',
flex: 1,
+ zIndex: 999
},
content: {
- position: 'relative',
- width: '100%'
+ display: 'flex',
+ flexDirection: 'column',
+ justifyContent: 'center',
+ alignItems: 'center'
},
actions: {
marginTop: -40,
@@ -27,8 +30,6 @@ const styles = theme => ({
paddingRight: theme.spacing(3)
},
wrapper: {
- width: '100%',
- maxWidth: 300,
display: 'flex',
flex: 1,
alignItems: 'center'
@@ -59,7 +60,11 @@ const ResponsiveScreen = (props) => {