Skip to content

Commit

Permalink
Fix password resetting (#76) + some minor improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
a-menshchikov committed Sep 17, 2023
1 parent 627af8f commit 5506da7
Show file tree
Hide file tree
Showing 15 changed files with 190 additions and 101 deletions.
5 changes: 5 additions & 0 deletions .env.dist
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ APP_VER=${MKS_VERSION}
TRUSTED_PROXIES='127.0.0.1'
TRUSTED_HOSTS='^your\.domain$'

MAILER_DSN="smtp://localhost"

SONATA_RESETTING_ADDRESS="sonata@localhost"
SONATA_RESETTING_SENDER="Sonata Admin"

LOGO_PATH='/render/logo.png'
BIG_LOGO_PATH='/render/logo_big.png'

Expand Down
2 changes: 1 addition & 1 deletion shared/homeless/assets/css/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ input#filter_search_value {

.skin-black .main-header > .logo {
padding: 0;
line-height: 47px;
line-height: 50px;
}

.skin-black .main-header > .logo img {
Expand Down
30 changes: 16 additions & 14 deletions shared/homeless/composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"type": "project",
"require": {
"php": ">=8.2",
"ext-intl": "*",
"doctrine/doctrine-bundle": "^2.0",
"doctrine/doctrine-migrations-bundle": "^3.0",
"doctrine/migrations": "^3.0",
Expand All @@ -26,19 +27,20 @@
"sonata-project/translation-bundle": "^3.0",
"sonata-project/user-bundle": "^5.0",
"symfony/apache-pack": "^1.0",
"symfony/asset": "^6.0",
"symfony/cache": "^6.0",
"symfony/config": "^6.0",
"symfony/console": "^6.0",
"symfony/dependency-injection": "^6.0",
"symfony/asset": "~6.3.0",
"symfony/cache": "~6.3.0",
"symfony/config": "~6.3.0",
"symfony/console": "~6.3.0",
"symfony/dependency-injection": "~6.3.0",
"symfony/flex": "^1.19",
"symfony/framework-bundle": "^6.0",
"symfony/http-kernel": "^6.0",
"symfony/framework-bundle": "~6.3.0",
"symfony/http-kernel": "~6.3.0",
"symfony/mailer": "~6.3.0",
"symfony/monolog-bundle": "^3.0",
"symfony/runtime": "^6.0",
"symfony/templating": "^6.0",
"symfony/twig-bundle": "^6.0",
"symfony/web-link": "^6.0",
"symfony/runtime": "~6.3.0",
"symfony/templating": "~6.3.0",
"symfony/twig-bundle": "~6.3.0",
"symfony/web-link": "~6.3.0",
"symfony/webpack-encore-bundle": "^v2.0.1",
"twbs/bootstrap-sass": "^3.3",
"twig/extra-bundle": "^3.5",
Expand All @@ -47,10 +49,10 @@
"vich/uploader-bundle": "^2.1"
},
"require-dev": {
"symfony/dotenv": "^6.0",
"symfony/dotenv": "~6.3.0",
"symfony/maker-bundle": "^1.0",
"symfony/var-dumper": "^6.0",
"symfony/web-profiler-bundle": "^6.0"
"symfony/var-dumper": "~6.3.0",
"symfony/web-profiler-bundle": "~6.3.0"
},
"replace": {
"symfony/polyfill-ctype": "*",
Expand Down
5 changes: 3 additions & 2 deletions shared/homeless/composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions shared/homeless/config/packages/mailer.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php
// SPDX-License-Identifier: BSD-3-Clause

declare(strict_types=1);

namespace Symfony\Component\DependencyInjection\Loader\Configurator;

use Symfony\Config\FrameworkConfig;

return static function (FrameworkConfig $framework): void {
$mailer = $framework->mailer();
$mailer->dsn('%env(MAILER_DSN)%');
};
2 changes: 1 addition & 1 deletion shared/homeless/config/packages/security.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
$mainFirewall->switchUser();

$security->accessControl()
->path('^/(login|resetting|app/version)$')
->path('^/((login|app/version)$|resetting)')
->roles(AuthenticatedVoter::PUBLIC_ACCESS)
;
$security->accessControl()
Expand Down
4 changes: 2 additions & 2 deletions shared/homeless/config/packages/sonata_user.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

$resetting = $sonataUser->resetting();
$resetting->email()
->address('sonata@localhost')
->senderName('Sonata Admin')
->address('%env(SONATA_RESETTING_ADDRESS)%')
->senderName('%env(SONATA_RESETTING_SENDER)%')
;
};
Original file line number Diff line number Diff line change
Expand Up @@ -211,5 +211,3 @@
</div>
{% endif %}
{% endblock %}


Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{% extends '@!SonataUser/Admin/Security/Resetting/checkEmail.html.twig' %}

{% block sonata_wrapper %}
<div class="login-box">
{% block login_box_header %}
<div class="login-logo">
<a href="{{ path('sonata_admin_dashboard') }}">
{% if 'icon' == sonata_config.getOption('logo_content') or 'all' == sonata_config.getOption('logo_content') %}
<div>
<img src="{{ asset(sonata_config.logo) }}" alt="{{ sonata_config.title }}">
</div>
{% endif %}
{% if 'text' == sonata_config.getOption('logo_content') or 'all' == sonata_config.getOption('logo_content') %}
<span>{{ sonata_config.title }}</span>
{% endif %}
</a>
</div>
{% endblock %}
<div class="login-box-body">
<p>{{ 'resetting.check_email'|trans({'tokenLifetime': tokenLifetime}, 'SonataUserBundle')|nl2br }}</p>
<a href="{{ path('sonata_user_admin_security_login') }}">
{{ 'title_user_authentication'|trans({}, 'SonataUserBundle') }}
</a>
</div>
</div>
{% endblock sonata_wrapper %}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{% block subject %}
{%- autoescape false -%}
{{ 'resetting.email.subject'|trans({'username': user.username}, 'SonataUserBundle') }}
{%- endautoescape -%}
{% endblock %}

{% block body_text %}
{% autoescape false %}
{{ 'resetting.email.message'|trans({'username': user.username, 'confirmationUrl': confirmationUrl}, 'SonataUserBundle') }}
{% endautoescape %}
{% endblock %}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{% extends '@!SonataUser/Admin/Security/Resetting/request.html.twig' %}

{% block login_box_header %}
<div class="login-logo">
<a href="{{ path('sonata_admin_dashboard') }}">
{% if 'icon' == sonata_config.getOption('logo_content') or 'all' == sonata_config.getOption('logo_content') %}
<div>
<img src="{{ asset(sonata_config.logo) }}" alt="{{ sonata_config.title }}">
</div>
{% endif %}
{% if 'text' == sonata_config.getOption('logo_content') or 'all' == sonata_config.getOption('logo_content') %}
<span>{{ sonata_config.title }}</span>
{% endif %}
</a>
</div>
{% endblock %}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{% extends '@!SonataUser/Admin/Security/Resetting/reset.html.twig' %}

{% block login_box_header %}
<div class="login-logo">
<a href="{{ path('sonata_admin_dashboard') }}">
{% if 'icon' == sonata_config.getOption('logo_content') or 'all' == sonata_config.getOption('logo_content') %}
<div>
<img src="{{ asset(sonata_config.logo) }}" alt="{{ sonata_config.title }}">
</div>
{% endif %}
{% if 'text' == sonata_config.getOption('logo_content') or 'all' == sonata_config.getOption('logo_content') %}
<span>{{ sonata_config.title }}</span>
{% endif %}
</a>
</div>
{% endblock %}
Original file line number Diff line number Diff line change
@@ -1,75 +1,58 @@
{% extends base_template %}

{% block sonata_nav %}
{% endblock sonata_nav %}

{% block logo %}
{% endblock logo %}

{% block sonata_left_side %}
{% endblock sonata_left_side %}

{% block body_attributes %}class="sonata-bc login-page"{% endblock %}

{% block sonata_wrapper %}

<div class="login-box">
<div class="login-logo">
<a href="{{ path('sonata_admin_dashboard') }}">
{% if 'single_image' == sonata_config.getOption('title_mode') or 'both' == sonata_config.getOption('title_mode') %}
<div>
<img style="width:200px;" src="{{ asset(sonata_config.titlelogo) }}"
alt="{{ sonata_config.title }}">
</div>
{% endif %}
{% if 'single_text' == sonata_config.getOption('title_mode') or 'both' == sonata_config.getOption('title_mode') %}
<span>{{ sonata_config.title }}</span>
{% endif %}
</a>
{% extends '@!SonataUser/Admin/Security/login.html.twig' %}

{% block login_box_header %}
<div class="login-logo">
<a href="{{ path('sonata_admin_dashboard') }}">
{% if 'icon' == sonata_config.getOption('logo_content') or 'all' == sonata_config.getOption('logo_content') %}
<div>
<img src="{{ asset(sonata_config.logo) }}" alt="{{ sonata_config.title }}">
</div>
{% endif %}
{% if 'text' == sonata_config.getOption('logo_content') or 'all' == sonata_config.getOption('logo_content') %}
<span>{{ sonata_config.title }}</span>
{% endif %}
</a>
</div>
{% endblock %}

{% block sonata_user_login_form %}
{% block sonata_user_login_error %}
{% if error %}
<div class="alert alert-danger">{{ error.message|trans({}, 'SonataUserBundle') }}</div>
{% endif %}
{% endblock %}
<p class="login-box-msg">{{ 'title_user_authentication'|trans({}, 'SonataUserBundle') }}</p>
<form action="{{ path("sonata_user_admin_security_check") }}" method="post" role="form">
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}"/>

<div class="form-group has-feedback">
<input type="text" class="form-control" id="username" name="_username"
value="{{ last_username }}" required="required"
placeholder="{{ 'security.login.username'|trans({}, 'SonataUserBundle') }}"/>
<span class="glyphicon glyphicon-user form-control-feedback"></span>
</div>
<div class="login-box-body">
{% block sonata_user_login_form %}
{% block sonata_user_login_error %}
{% if error %}
<div class="alert alert-danger">{{ error.message|trans({}, 'SonataUserBundle') }}</div>
{% endif %}
{% endblock %}
<p class="login-box-msg">{{ 'title_user_authentication'|trans({}, 'SonataUserBundle') }}</p>
<form action="{{ path("sonata_user_admin_security_check") }}" method="post" role="form">
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}"/>

<div class="form-group has-feedback">
<input type="text" class="form-control" id="username" name="_username"
value="{{ last_username }}" required="required"
placeholder="{{ 'security.login.username'|trans({}, 'SonataUserBundle') }}"/>
<span class="glyphicon glyphicon-user form-control-feedback"></span>
</div>

<div class="form-group has-feedback">
<input type="password" class="form-control" id="password" name="_password" required="required"
placeholder="{{ 'security.login.password'|trans({}, 'SonataUserBundle') }}"/>
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>

<div class="row">
<div class="col-xs-8">
<div class="checkbox">
<label>
<input type="checkbox" id="remember_me" name="_remember_me" value="on"/>
{{ 'security.login.remember_me'|trans({}, 'SonataUserBundle') }}
</label>
</div>
</div>
<div class="col-xs-4">
<button type="submit"
class="btn btn-primary btn-block btn-flat">{{ 'security.login.submit'|trans({}, 'SonataUserBundle') }}</button>
</div>
</div>
</form>
<div class="form-group has-feedback">
<input type="password" class="form-control" id="password" name="_password" required="required"
placeholder="{{ 'security.login.password'|trans({}, 'SonataUserBundle') }}"/>
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>

<a href="{{ reset_route }}">{{ 'forgotten_password'|trans({}, 'SonataUserBundle') }}</a>
{% endblock %}
<div class="row">
<div class="col-xs-8">
<div class="checkbox">
<label>
<input type="checkbox" id="remember_me" name="_remember_me" value="on"/>
{{ 'security.login.remember_me'|trans({}, 'SonataUserBundle') }}
</label>
</div>
</div>
<div class="col-xs-4">
<button type="submit"
class="btn btn-primary btn-block btn-flat">{{ 'security.login.submit'|trans({}, 'SonataUserBundle') }}</button>
</div>
</div>
</div>
</form>

{% endblock sonata_wrapper %}
<a href="{{ reset_route }}">{{ 'forgotten_password'|trans({}, 'SonataUserBundle') }}</a>
{% endblock %}
27 changes: 27 additions & 0 deletions shared/homeless/translations/SonataUserBundle+intl-icu.ru.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
breadcrumb:
link_user_delete: Удалить

form:
group_profile: Профиль
label_username: Логин

user: Пользователь
roles: Роли

resetting.check_email: |-
Письмо отправлено. Оно содержит ссылку, при переходе по которой ваш пароль будет сброшен.
Заметьте, вы сможете запросить новый пароль только через {tokenLifetime, plural,
one {# час}
few {# часа}
other {# часов}
}.
Если вы не получили письмо, проверьте папку Спам или попробуйте снова.
resetting.email.message: |-
Приветствуем, {username}!<br>
<br>
Для сброса пароля, пожалуйста, пройдите по ссылке {confirmationUrl}<br>
<br>
С наилучшими пожеланиями,<br>
команда сайта.
9 changes: 0 additions & 9 deletions shared/homeless/translations/SonataUserBundle.ru.yml

This file was deleted.

0 comments on commit 5506da7

Please sign in to comment.