From 0dcb90ee9d4a3ac3f942b58d721069bc1d012c01 Mon Sep 17 00:00:00 2001 From: David Christofas Date: Wed, 29 Jun 2022 18:10:56 +0200 Subject: [PATCH] apply custom ownCloud desgin --- services/idp/Makefile | 4 +- services/idp/package.json | 1 + services/idp/ui/public/index.html | 10 +- services/idp/ui/src/App.jsx | 10 +- services/idp/ui/src/Main.jsx | 18 +- services/idp/ui/src/app.css | 157 ++++++++++++++++++ services/idp/ui/src/components/Loading.jsx | 31 +--- .../ui/src/components/ResponsiveScreen.jsx | 48 +++--- services/idp/ui/src/components/TextInput.js | 28 ++++ .../idp/ui/src/containers/Login/Login.jsx | 113 +++++++------ services/idp/ui/src/fancy-background.css | 2 +- services/idp/ui/src/images/background.jpg | Bin 0 -> 88069 bytes services/idp/ui/src/index.tsx | 7 +- services/idp/ui/src/theme.js | 2 +- services/idp/yarn.lock | 70 ++++++++ 15 files changed, 358 insertions(+), 143 deletions(-) create mode 100644 services/idp/ui/src/app.css create mode 100644 services/idp/ui/src/components/TextInput.js create mode 100644 services/idp/ui/src/images/background.jpg diff --git a/services/idp/Makefile b/services/idp/Makefile index 1844f39da..b9b291934 100644 --- a/services/idp/Makefile +++ b/services/idp/Makefile @@ -30,9 +30,7 @@ ci-go-generate: # CI runs ci-node-generate automatically before this target ci-node-generate: assets .PHONY: assets -assets: i18n \ - ui-images \ - yarn-build \ +assets: yarn-build \ assets/identifier/static \ assets/identifier/static/logo.svg \ assets/identifier/static/favicon.ico diff --git a/services/idp/package.json b/services/idp/package.json index 3902e36ce..baf2e2e59 100644 --- a/services/idp/package.json +++ b/services/idp/package.json @@ -23,6 +23,7 @@ "i18next-browser-languagedetector": "^6.1.3", "i18next-http-backend": "^1.3.2", "i18next-resources-to-backend": "^1.0.0", + "kpop": "https://download.kopano.io/community/kapp:/kpop-2.2.0.tgz", "query-string": "^7.1.1", "react": "^17.0.2", "react-dom": "^17.0.2", diff --git a/services/idp/ui/public/index.html b/services/idp/ui/public/index.html index 7d5cb2ca4..8dccae78b 100644 --- a/services/idp/ui/public/index.html +++ b/services/idp/ui/public/index.html @@ -3,18 +3,16 @@ - + + - Sign in to your account + Sign in - ownCloud -
-
-
-
+
diff --git a/services/idp/ui/src/App.jsx b/services/idp/ui/src/App.jsx index bf97168f6..e7db6e6cc 100644 --- a/services/idp/ui/src/App.jsx +++ b/services/idp/ui/src/App.jsx @@ -1,15 +1,14 @@ import React, { Suspense, lazy } from 'react'; import { MuiThemeProvider } from '@material-ui/core/styles'; -import { - CssBaseline, - } from '@material-ui/core'; +import { defaultTheme as theme } from 'kpop/es/theme'; +import 'kpop/static/css/base.css'; +import 'kpop/static/css/scrollbar.css'; import './App.css'; -import './fancy-background.css'; + import Spinner from './components/Spinner'; import * as version from './version'; -import theme from './theme'; const LazyMain = lazy(() => import(/* webpackChunkName: "identifier-main" */ './Main')); @@ -18,7 +17,6 @@ console.info(`Kopano Identifier build version: ${version.build}`); // eslint-dis const App = () => { return ( - }> diff --git a/services/idp/ui/src/Main.jsx b/services/idp/ui/src/Main.jsx index 22bbf9a67..58c44753f 100644 --- a/services/idp/ui/src/Main.jsx +++ b/services/idp/ui/src/Main.jsx @@ -8,24 +8,14 @@ import { withStyles } from '@material-ui/core/styles'; import Routes from './Routes'; -const styles = () => ({ - root: { - position: 'relative', - display: 'flex', - flex: 1 - } -}); - class Main extends PureComponent { render() { const { classes, hello, pathPrefix } = this.props; return ( -
- - - -
+ + + ); } @@ -54,4 +44,4 @@ const mapStateToProps = (state) => { }; }; -export default connect(mapStateToProps)(withStyles(styles)(Main)); +export default connect(mapStateToProps)(Main); diff --git a/services/idp/ui/src/app.css b/services/idp/ui/src/app.css new file mode 100644 index 000000000..1a7f1d5ff --- /dev/null +++ b/services/idp/ui/src/app.css @@ -0,0 +1,157 @@ +/* additional css on top of kpop */ +body { + font-family: 'Open Sans', sans-serif; +} + +strong { + font-weight: 600; +} + +.oc-login-bg { + background-image: url(./images/background.jpg); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + z-index: 0; +} + +#loader { + /* 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%); +} + +.oc-progress { + /* 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; +} + +.oc-input { + background-color: #042047; + border: 1px solid rgba(78, 133, 200, 0.8); + border-radius: 3px; + color: rgba(255, 255, 255, 0.8); + height: 40px; + width: 300px; + padding: 16px; + box-sizing: border-box; + font-size: 1rem; +} + +.oc-label { + color: #fff; + display: inline-block; + margin-bottom: 5px; +} + +.oc-input.error { + outline: none; + border: 1px solid #fe4600; +} + +.MuiTypography-colorError { + color: #fe4600 !important; +} + +.oc-input:focus { + outline: none; + border: 1px solid #fff; +} + +.oc-input::placeholder { + color: rgba(78, 133, 200, 0.8); +} + +.oc-input + .oc-input { + margin-top: 15px; +} + +.MuiTouchRipple-root { + display: none !important; +} + +.oc-button { + /* Needs to be important to overwrite material-ui */ + font-size: 1.0625rem !important; +} + +.oc-button-primary { + /* Needs to be important to overwrite material-ui */ + background-color: #4a76ac !important; + border: 1px solid transparent !important; +} + +.oc-button-primary:hover, +.oc-button-primary:focus { + /* Needs to be important to overwrite material-ui */ + background-color: #4a76ac !important; + border: 1px solid white !important; +} + +.oc-checkbox-dark svg { + /* Needs to be important to overwrite material-ui */ + fill: white !important; +} + +.oc-footer-message { + color: white; + padding: 10px; + font-size: 0.8rem; +} + +@media only screen and (max-width: 768px) { + .oc-logo { + height: 60px; + top: -90px; + } +} + +/* Helpers */ +.oc-mt-l { + margin-top: 30px !important; +} + +.oc-mb-m { + margin-bottom: 20px !important; +} + +.oc-light { + color: #fff !important; +} + +.oc-login-form div:not(:last-of-type) { + margin-bottom: 15px; +} + + +/* + * Special SR classes + * 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; +} diff --git a/services/idp/ui/src/components/Loading.jsx b/services/idp/ui/src/components/Loading.jsx index 8412d215c..b1d2d78c7 100644 --- a/services/idp/ui/src/components/Loading.jsx +++ b/services/idp/ui/src/components/Loading.jsx @@ -4,7 +4,6 @@ import { connect } from 'react-redux'; import { withTranslation } from 'react-i18next'; -import { withStyles } from '@material-ui/core/styles'; import LinearProgress from '@material-ui/core/LinearProgress'; import Grid from '@material-ui/core/Grid'; import Typography from '@material-ui/core/Typography'; @@ -14,47 +13,28 @@ import renderIf from 'render-if'; import { retryHello } from '../actions/common'; import { ErrorMessage } from '../errors'; -const styles = theme => ({ - root: { - flexGrow: 1, - position: 'absolute', - top: 0, - bottom: 0, - left: 0, - right: 0 - }, - progress: { - height: '4px', - width: '100px' - }, - button: { - marginTop: theme.spacing(5) - } -}); - class Loading extends React.PureComponent { render() { const { classes, error, t } = this.props; return ( - {renderIf(error === null)(() => ( - + ))} {renderIf(error !== null)(() => (
- + {t("konnect.loading.error.headline", "Failed to connect to server")} - +
))}
-
); } @@ -90,4 +69,4 @@ const mapStateToProps = (state) => { }; }; -export default connect(mapStateToProps)(withTranslation()(withStyles(styles)(Loading))); +export default connect(mapStateToProps)(withTranslation()(Loading)); diff --git a/services/idp/ui/src/components/ResponsiveScreen.jsx b/services/idp/ui/src/components/ResponsiveScreen.jsx index 761942006..b05878f7c 100644 --- a/services/idp/ui/src/components/ResponsiveScreen.jsx +++ b/services/idp/ui/src/components/ResponsiveScreen.jsx @@ -2,6 +2,8 @@ import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; +import { Trans } from 'react-i18next'; + import { withStyles } from '@material-ui/core/styles'; import Grid from '@material-ui/core/Grid'; import DialogActions from '@material-ui/core/DialogActions'; @@ -18,25 +20,21 @@ const styles = theme => ({ flex: 1, }, content: { - paddingTop: 24, - paddingBottom: 12, - minHeight: 350, - paddingLeft: theme.spacing(2), - paddingRight: theme.spacing(2), - position: 'relative' - }, - dialog: { - maxWidth: 440, - }, - logo: { - height: 24, + position: 'relative', + width: '100%' }, actions: { marginTop: -40, - minHeight: 45, justifyContent: 'flex-start', paddingLeft: theme.spacing(3), paddingRight: theme.spacing(3) + }, + wrapper: { + width: '100%', + maxWidth: 300, + display: 'flex', + flex: 1, + alignItems: 'center' } }); @@ -56,26 +54,22 @@ const ResponsiveScreen = (props) => { const bannerLogoSrc = branding?.bannerLogo ? branding.bannerLogo : Logo; const logo = withoutLogo ? null : - ; + ownCloud Logo; const content = loading ? : (withoutPadding ? children : {children}); return ( - - -
- {logo} - {content} +
+
+ {logo} + {content} +
- {!loading && } - +
+ ownCloud - a safe home for all your data +
); }; diff --git a/services/idp/ui/src/components/TextInput.js b/services/idp/ui/src/components/TextInput.js new file mode 100644 index 000000000..f8f116428 --- /dev/null +++ b/services/idp/ui/src/components/TextInput.js @@ -0,0 +1,28 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + + +const TextInput = (props) => { + const label = props.label; + const extraClassName = props.extraClassName; + + delete props.label; + delete props.extraClassName; + + return ( +
+ + +
); +}; + +TextInput.propTypes = { + placeholder: PropTypes.object, + label: PropTypes.object, + id: PropTypes.string, + extraClassName: props.string, +} + +export default TextInput; diff --git a/services/idp/ui/src/containers/Login/Login.jsx b/services/idp/ui/src/containers/Login/Login.jsx index 438153adf..bc7dc4a36 100644 --- a/services/idp/ui/src/containers/Login/Login.jsx +++ b/services/idp/ui/src/containers/Login/Login.jsx @@ -15,14 +15,12 @@ import Typography from '@material-ui/core/Typography'; import DialogActions from '@material-ui/core/DialogActions'; import DialogContent from '@material-ui/core/DialogContent'; +import TextInput from '../../components/TextInput' + import { updateInput, executeLogonIfFormValid, advanceLogonFlow } from '../../actions/login'; import { ErrorMessage } from '../../errors'; const styles = theme => ({ - button: { - margin: theme.spacing(1), - minWidth: 100 - }, buttonProgress: { color: green[500], position: 'absolute', @@ -36,14 +34,12 @@ const styles = theme => ({ }, wrapper: { position: 'relative', - display: 'inline-block' - }, - slideContainer: { - overflowX: 'hidden', + width: '100%', + textAlign: 'center' }, message: { - marginTop: theme.spacing(2), - marginBottom: theme.spacing(2) + marginTop: 5, + marginBottom: 5 } }); @@ -61,6 +57,29 @@ function Login(props) { } = props; const { t } = useTranslation(); + const loginFailed = errors.http; + const hasError = errors.http || errors.username || errors.password; + const errorMessage = errors.http + ? + : (errors.username + ? + : ); + const extraPropsUsername = { + "aria-invalid" : (errors.username || errors.http) ? 'true' : 'false' + }; + const extraPropsPassword = { + "aria-invalid" : (errors.password || errors.http) ? 'true' : 'false', + }; + + if(errors.username || errors.http){ + extraPropsUsername['extraClassName'] = 'error'; + extraPropsUsername['aria-describedby'] = 'oc-login-error-message'; + } + + if(errors.password || errors.http){ + extraPropsPassword['extraClassName'] = 'error'; + extraPropsPassword['aria-describedby'] = 'oc-login-error-message'; + } useEffect(() => { if (hello && hello.state && history.action !== 'PUSH') { @@ -106,62 +125,48 @@ function Login(props) { }, [hello, t]); return ( - - - {t("konnect.login.headline", "Sign in")} - - -
this.logon(event)}> - } - fullWidth - margin="dense" - autoFocus - inputProps={{ - autoCapitalize: 'off', - spellCheck: 'false' - }} - value={username} - onChange={handleChange('username')} - autoComplete="kopano-account username" - /> - } - fullWidth - margin="dense" - onChange={handleChange('password')} - autoComplete="kopano-account current-password" - /> - +
+

Login

+ handleNextClick(event)}> + + + {hasError && {errorMessage}}
+
{loading && }
- - - {renderIf(errors.http)(() => ( - - - - ))} - - {hello?.details?.branding?.signinPageText && {hello.details.branding.signinPageText}} - +
); } diff --git a/services/idp/ui/src/fancy-background.css b/services/idp/ui/src/fancy-background.css index a4f650d38..67691eaac 100644 --- a/services/idp/ui/src/fancy-background.css +++ b/services/idp/ui/src/fancy-background.css @@ -12,6 +12,6 @@ background-size: cover; background-repeat: no-repeat; background-position: center; - background-image: url(./images/loginscreen-bg.svg); + background-image: url(./images/background.jpg); z-index: 0; } diff --git a/services/idp/ui/src/images/background.jpg b/services/idp/ui/src/images/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..11121f42792790c3e633a25c0ebc2440e058fe48 GIT binary patch literal 88069 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 z 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 literal 0 HcmV?d00001 diff --git a/services/idp/ui/src/index.tsx b/services/idp/ui/src/index.tsx index 3e0f9690e..0d163ba23 100644 --- a/services/idp/ui/src/index.tsx +++ b/services/idp/ui/src/index.tsx @@ -2,16 +2,13 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; -import '@fontsource/roboto/300.css'; -import '@fontsource/roboto/400.css'; -import '@fontsource/roboto/500.css'; -import '@fontsource/roboto/700.css'; - import './i18n'; import App from './App'; import store from './store'; +import './app.css'; + ReactDOM.render( diff --git a/services/idp/ui/src/theme.js b/services/idp/ui/src/theme.js index d86783a4c..f0d944c79 100644 --- a/services/idp/ui/src/theme.js +++ b/services/idp/ui/src/theme.js @@ -28,7 +28,7 @@ const theme = createMuiTheme({ tonalOffset: 0.2, }, typography: { - fontSize: 12, + fontSize: 16, useNextVariants: true, button: { textTransform: 'none', diff --git a/services/idp/yarn.lock b/services/idp/yarn.lock index b00acced7..272cddb18 100644 --- a/services/idp/yarn.lock +++ b/services/idp/yarn.lock @@ -6133,6 +6133,23 @@ __metadata: languageName: node linkType: hard +"cldr@npm:^5.2.0": + version: 5.8.0 + resolution: "cldr@npm:5.8.0" + dependencies: + escodegen: ^2.0.0 + esprima: ^4.0.1 + memoizeasync: ^1.1.0 + passerror: ^1.1.1 + pegjs: ^0.10.0 + seq: ^0.3.5 + unicoderegexp: ^0.4.1 + xmldom: ^0.4.0 + xpath: ^0.0.32 + checksum: 614f7867382c6958b8440523911dac8f4f664c64916da391ee666060af03e17d664f5adff93dd3ec1cf7386be2bf1cbb1e934fce896d71243efe2229139a1aa3 + languageName: node + linkType: hard + "cldr@npm:^7.1.1": version: 7.2.0 resolution: "cldr@npm:7.2.0" @@ -6672,6 +6689,15 @@ __metadata: languageName: node linkType: hard +"crc32@npm:^0.2.2": + version: 0.2.2 + resolution: "crc32@npm:0.2.2" + bin: + crc32: ./bin/runner.js + checksum: e4301b6bfbc081dc44a02246657581a8df27c42528bfb4879d0c93afca68040ffd4d87eb8b483df04ee8dd4ad6538844512169156be69b1a4cec23c48b81881d + languageName: node + linkType: hard + "create-ecdh@npm:^4.0.0": version: 4.0.4 resolution: "create-ecdh@npm:4.0.4" @@ -9697,6 +9723,13 @@ __metadata: languageName: node linkType: hard +"hsv-rgb@npm:^1.0.0": + version: 1.0.0 + resolution: "hsv-rgb@npm:1.0.0" + checksum: eb1f616bd43dceb9ed322167d8007747c075e9429cfbf81721a524d0454c68140b4593a5f97d0b215d61e2ddca722edc856734fcc3e10f37fc4b770ca526eb38 + languageName: node + linkType: hard + "html-encoding-sniffer@npm:^2.0.1": version: 2.0.1 resolution: "html-encoding-sniffer@npm:2.0.1" @@ -10056,6 +10089,7 @@ __metadata: i18next-http-backend: ^1.3.2 i18next-parser: ^5.4.0 i18next-resources-to-backend: ^1.0.0 + kpop: "https://download.kopano.io/community/kapp:/kpop-2.2.0.tgz" query-string: ^7.1.1 react: ^17.0.2 react-dev-utils: ^11.0.4 @@ -10903,6 +10937,13 @@ __metadata: languageName: node linkType: hard +"iso-639-1@npm:^2.0.5": + version: 2.1.15 + resolution: "iso-639-1@npm:2.1.15" + checksum: a201530819d33e9ce077b02c786d67b35be5d823be27b5aacc18d880e580e559e39ec5055f8e2abcdc210f46618a643bf3c74e6fe6e8255fe62059682750e595 + languageName: node + linkType: hard + "isobject@npm:^2.0.0": version: 2.1.0 resolution: "isobject@npm:2.1.0" @@ -11893,6 +11934,28 @@ __metadata: languageName: node linkType: hard +"kpop@https://download.kopano.io/community/kapp:/kpop-2.2.0.tgz": + version: 2.2.0 + resolution: "kpop@https://download.kopano.io/community/kapp:/kpop-2.2.0.tgz" + dependencies: + cldr: ^5.2.0 + crc32: ^0.2.2 + hsv-rgb: ^1.0.0 + iso-639-1: ^2.0.5 + peerDependencies: + "@gluejs/glue": ^0.3.0 + "@material-ui/core": ^4.8.0 + "@material-ui/icons": ^4.5.1 + notistack: ^0.8.8 + oidc-client: ^1.9.1 + react: ^16.8.0 + react-dom: ^16.8.0 + react-intl: ^2.6.0 + render-if: ^0.1.1 + checksum: 37e981756f26f396f0d1a6e9acb87eb4a4dc6ad6272f84860a236da27cea152e029daffb81e04307eba366cf4279d18a19cba50ddfdcc38d66d060593caa50ce + languageName: node + linkType: hard + "language-subtag-registry@npm:~0.3.2": version: 0.3.21 resolution: "language-subtag-registry@npm:0.3.21" @@ -19060,6 +19123,13 @@ __metadata: languageName: node linkType: hard +"xmldom@npm:^0.4.0": + version: 0.4.0 + resolution: "xmldom@npm:0.4.0" + checksum: ea975a7bd87109542ce24b19a70e50a3d64d20c757affa1a6c8cf906cbb39f0071a1bea9016beb5532388bc61dcbefddb92f3db2197dceee2b4c46343348ab3c + languageName: node + linkType: hard + "xpath@npm:^0.0.32": version: 0.0.32 resolution: "xpath@npm:0.0.32"