LoginForm.jsx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. class LoginForm extends React.Component {
  5. constructor(props) {
  6. super(props);
  7. this.state = {
  8. };
  9. this.renderLocalOrLdapLoginForm = this.renderLocalOrLdapLoginForm.bind(this);
  10. }
  11. renderLocalOrLdapLoginForm() {
  12. const { t, isLdapStrategySetup } = this.props;
  13. return (
  14. <form className="col-12" role="form" action="/login" method="post">
  15. <div className="input-group mb-3">
  16. <div className="input-group-prepend">
  17. <span className="input-group-text"><i className="icon-user"></i></span>
  18. </div>
  19. <input type="text" className="form-control" placeholder="Username or E-mail" name="loginForm[username]" />
  20. {isLdapStrategySetup && (
  21. <div className="input-group-append">
  22. <small className="input-group-text text-success">
  23. <i className="icon-fw icon-check"></i> LDAP
  24. </small>
  25. </div>
  26. )}
  27. </div>
  28. <div className="input-group mb-3">
  29. <div className="input-group-prepend">
  30. <span className="input-group-text"><i className="icon-lock"></i></span>
  31. </div>
  32. <input type="password" className="form-control" placeholder="Password" name="loginForm[password]" />
  33. </div>
  34. <div className="input-group justify-content-center d-flex mt-5">
  35. <input type="hidden" name="_csrf" value="{{ csrf() }}" />
  36. <button type="submit" id="login" className="btn btn-fill login px-0 py-2">
  37. <div className="eff"></div>
  38. <span className="btn-label p-3"><i className="icon-login"></i></span>
  39. <span className="btn-label-text p-3">{ t('Sign in') }</span>
  40. </button>
  41. </div>
  42. </form>
  43. );
  44. }
  45. render() {
  46. const {
  47. isRegistering,
  48. isLocalStrategySetup,
  49. isLdapStrategySetup,
  50. } = this.props;
  51. const isLocalOrLdapStrategiesEnabled = isLocalStrategySetup || isLdapStrategySetup;
  52. const registerFormClass = isRegistering ? 'to-flip' : '';
  53. return (
  54. <div className={`login-dialog mx-auto flipper ${registerFormClass}`} id="login-dialog">
  55. <div className="row">
  56. <div className="col-12">
  57. { isLocalOrLdapStrategiesEnabled && this.renderLocalOrLdapLoginForm() }
  58. </div>
  59. </div>
  60. </div>
  61. );
  62. }
  63. }
  64. LoginForm.propTypes = {
  65. // i18next
  66. t: PropTypes.func.isRequired,
  67. isRegistering: PropTypes.bool,
  68. isLocalStrategySetup: PropTypes.bool,
  69. isLdapStrategySetup: PropTypes.bool,
  70. };
  71. export default withTranslation()(LoginForm);