From 148c511b9eed20c810b44158e9b93f523bd452eb Mon Sep 17 00:00:00 2001 From: L_DelOff Date: Sat, 12 Aug 2023 19:43:04 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B9=D0=BA=D0=B0=20=D0=91=D0=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ru/ldeloff/servermonitorbot/model/Role.java | 4 ++-- .../java/ru/ldeloff/servermonitorbot/model/User.java | 6 +++--- .../resources/db/scripts/release_0_0_1/changelog.xml | 4 ++++ .../release_0_0_1/scripts/01_create_table_users.sql | 2 +- .../release_0_0_1/scripts/02_create_table_roles.sql | 2 +- .../release_0_0_1/scripts/05_add_anonymous_role.sql | 1 + .../release_0_0_1/scripts/06_refactor_users_table.sql | 9 +++++++++ .../release_0_0_1/scripts/07_refactor_roles_table.sql | 6 ++++++ .../db/scripts/release_0_0_1/scripts/08_add_roles.sql | 4 ++++ 9 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/db/scripts/release_0_0_1/scripts/05_add_anonymous_role.sql create mode 100644 src/main/resources/db/scripts/release_0_0_1/scripts/06_refactor_users_table.sql create mode 100644 src/main/resources/db/scripts/release_0_0_1/scripts/07_refactor_roles_table.sql create mode 100644 src/main/resources/db/scripts/release_0_0_1/scripts/08_add_roles.sql diff --git a/src/main/java/ru/ldeloff/servermonitorbot/model/Role.java b/src/main/java/ru/ldeloff/servermonitorbot/model/Role.java index bdbbccf..d6f800d 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/model/Role.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/model/Role.java @@ -12,6 +12,6 @@ public class Role { @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; - @Column(name = "role") - private String role; + @Column(name = "name") + private String name; } diff --git a/src/main/java/ru/ldeloff/servermonitorbot/model/User.java b/src/main/java/ru/ldeloff/servermonitorbot/model/User.java index b4a0ddd..c732b3e 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/model/User.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/model/User.java @@ -12,10 +12,10 @@ public class User { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(name = "login") - private Long login; + @Column(name = "telegram_id") + private Long telegramId; @ManyToOne - @JoinColumn(name = "id_role") + @JoinColumn(name = "role_id") private Role role; } diff --git a/src/main/resources/db/scripts/release_0_0_1/changelog.xml b/src/main/resources/db/scripts/release_0_0_1/changelog.xml index 9607261..1b0334d 100644 --- a/src/main/resources/db/scripts/release_0_0_1/changelog.xml +++ b/src/main/resources/db/scripts/release_0_0_1/changelog.xml @@ -8,5 +8,9 @@ + + + + \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/01_create_table_users.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/01_create_table_users.sql index 8d5f188..9164f99 100644 --- a/src/main/resources/db/scripts/release_0_0_1/scripts/01_create_table_users.sql +++ b/src/main/resources/db/scripts/release_0_0_1/scripts/01_create_table_users.sql @@ -4,7 +4,7 @@ --comment: Создание таблицы пользователей CREATE TABLE users ( - id integer PRIMARY KEY, + id SERIAL PRIMARY KEY, login VARCHAR(128), id_role integer ); diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/02_create_table_roles.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/02_create_table_roles.sql index d09119d..e7d5fad 100644 --- a/src/main/resources/db/scripts/release_0_0_1/scripts/02_create_table_roles.sql +++ b/src/main/resources/db/scripts/release_0_0_1/scripts/02_create_table_roles.sql @@ -4,7 +4,7 @@ --comment: Создание таблицы ролей CREATE TABLE roles ( - id integer PRIMARY KEY, + id SERIAL PRIMARY KEY, role VARCHAR(128) ); diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/05_add_anonymous_role.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/05_add_anonymous_role.sql new file mode 100644 index 0000000..ba5a19a --- /dev/null +++ b/src/main/resources/db/scripts/release_0_0_1/scripts/05_add_anonymous_role.sql @@ -0,0 +1 @@ +INSERT INTO roles (id, role) VALUES (3, 'ANONYMOUS'); \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/06_refactor_users_table.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/06_refactor_users_table.sql new file mode 100644 index 0000000..4a51d65 --- /dev/null +++ b/src/main/resources/db/scripts/release_0_0_1/scripts/06_refactor_users_table.sql @@ -0,0 +1,9 @@ +ALTER TABLE users + DROP COLUMN login; + +ALTER TABLE users + ADD COLUMN telegram_id INTEGER UNIQUE; + COMMENT ON COLUMN users.telegram_id IS 'Telegram ID пользователя'; + +ALTER TABLE users + DROP COLUMN id_role; \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/07_refactor_roles_table.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/07_refactor_roles_table.sql new file mode 100644 index 0000000..c39ec05 --- /dev/null +++ b/src/main/resources/db/scripts/release_0_0_1/scripts/07_refactor_roles_table.sql @@ -0,0 +1,6 @@ +ALTER TABLE roles + DROP COLUMN role; + +ALTER TABLE roles + ADD COLUMN name VARCHAR(128); +COMMENT ON COLUMN roles.name IS 'Имя роли'; \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/08_add_roles.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/08_add_roles.sql new file mode 100644 index 0000000..cdce579 --- /dev/null +++ b/src/main/resources/db/scripts/release_0_0_1/scripts/08_add_roles.sql @@ -0,0 +1,4 @@ +TRUNCATE TABLE roles CASCADE; +INSERT INTO roles (id, name) VALUES (1, 'ADMIN'); +INSERT INTO roles (id, name) VALUES (2, 'USER'); +INSERT INTO roles (id, name) VALUES (3, 'ANONYMOUS'); \ No newline at end of file From e1ea86b36bfa6a426ac9db67bfaad14183c645ae Mon Sep 17 00:00:00 2001 From: L_DelOff Date: Sat, 12 Aug 2023 19:43:49 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D0=B7=D0=B0=D0=B3?= =?UTF-8?q?=D1=80=D1=83=D0=B7=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D0=B5=D0=B9=20=D0=B2=20?= =?UTF-8?q?=D0=91=D0=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servermonitorbot/config/UserConfig.java | 17 ++++++++++ .../servermonitorbot/init/AddUsers.java | 34 +++++++++++++++++++ .../servermonitorbot/mapper/UserMapper.java | 22 ++++++++++++ .../model/dto/InitUserDto.java | 14 ++++++++ src/main/resources/application.yml | 3 ++ 5 files changed, 90 insertions(+) create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/config/UserConfig.java create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/init/AddUsers.java create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/mapper/UserMapper.java create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/model/dto/InitUserDto.java diff --git a/src/main/java/ru/ldeloff/servermonitorbot/config/UserConfig.java b/src/main/java/ru/ldeloff/servermonitorbot/config/UserConfig.java new file mode 100644 index 0000000..9c9e51d --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/config/UserConfig.java @@ -0,0 +1,17 @@ +package ru.ldeloff.servermonitorbot.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import ru.ldeloff.servermonitorbot.model.dto.InitUserDto; + +import java.util.List; + +@Configuration +@ConfigurationProperties(prefix = "bot") +@Getter +@Setter +public class UserConfig { + private List users; +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/init/AddUsers.java b/src/main/java/ru/ldeloff/servermonitorbot/init/AddUsers.java new file mode 100644 index 0000000..560d72e --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/init/AddUsers.java @@ -0,0 +1,34 @@ +package ru.ldeloff.servermonitorbot.init; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; +import ru.ldeloff.servermonitorbot.config.UserConfig; +import ru.ldeloff.servermonitorbot.mapper.UserMapper; +import ru.ldeloff.servermonitorbot.model.User; +import ru.ldeloff.servermonitorbot.model.dto.InitUserDto; +import ru.ldeloff.servermonitorbot.service.user.UserService; + +import java.util.List; + +@Component +public class AddUsers implements ApplicationRunner { + final List initUsers; + final UserService userService; + final UserMapper userMapper; + + @Autowired + public AddUsers(UserConfig userConfig, UserService userService, UserMapper userMapper) { + this.initUsers = userConfig.getUsers(); + this.userService = userService; + this.userMapper = userMapper; + } + + @Override + public void run(ApplicationArguments args) throws Exception { + initUsers.forEach(initUserDto -> { + User user = userService.saveOrUpdateUser(userMapper.dtoToUser(initUserDto)); + }); + } +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/mapper/UserMapper.java b/src/main/java/ru/ldeloff/servermonitorbot/mapper/UserMapper.java new file mode 100644 index 0000000..aa7811a --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/mapper/UserMapper.java @@ -0,0 +1,22 @@ +package ru.ldeloff.servermonitorbot.mapper; + +import org.springframework.stereotype.Component; +import ru.ldeloff.servermonitorbot.model.User; +import ru.ldeloff.servermonitorbot.model.dto.InitUserDto; +import ru.ldeloff.servermonitorbot.service.role.RoleService; + +@Component +public class UserMapper { + final RoleService roleService; + + public UserMapper(RoleService roleService) { + this.roleService = roleService; + } + + public User dtoToUser(InitUserDto initUserDto) { + User user = new User(); + user.setTelegramId(initUserDto.getTelegramId()); + user.setRole(roleService.findRoleByName(initUserDto.getRole())); + return user; + } +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/model/dto/InitUserDto.java b/src/main/java/ru/ldeloff/servermonitorbot/model/dto/InitUserDto.java new file mode 100644 index 0000000..a18efdf --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/model/dto/InitUserDto.java @@ -0,0 +1,14 @@ +package ru.ldeloff.servermonitorbot.model.dto; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.springframework.stereotype.Component; + +@Data +@Component +public class InitUserDto { + @NotNull + private long telegramId; + @NotNull + private String role; +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index fd384fc..35a985d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -19,6 +19,9 @@ spring: bot: name: "ServerMonitorBot" token: "token" + users: + - telegramId: 123456789 + role: admin ssh: servers: - From ad7ee9a96cce82b11aa10029da9e626c9b7e7684 Mon Sep 17 00:00:00 2001 From: L_DelOff Date: Sat, 12 Aug 2023 19:44:30 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=80=D0=BE=D0=BB=D0=B5=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../servermonitorbot/config/SshConfig.java | 13 +- .../controller/TelegramBotController.java | 116 +++++++++++++++--- .../repository/RoleRepository.java | 13 ++ .../repository/UserRepository.java | 10 ++ .../service/TelegramBotService.java | 3 +- .../service/TelegramBotServiceImpl.java | 22 ++++ .../service/role/RoleService.java | 9 ++ .../service/role/RoleServiceImpl.java | 28 +++++ .../service/user/UserService.java | 9 ++ .../service/user/UserServiceImpl.java | 29 +++++ .../utils/ui/TelegramBotKeyboard.java | 4 +- 11 files changed, 226 insertions(+), 30 deletions(-) create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/repository/RoleRepository.java create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/repository/UserRepository.java create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleService.java create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleServiceImpl.java create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/service/user/UserService.java create mode 100644 src/main/java/ru/ldeloff/servermonitorbot/service/user/UserServiceImpl.java diff --git a/src/main/java/ru/ldeloff/servermonitorbot/config/SshConfig.java b/src/main/java/ru/ldeloff/servermonitorbot/config/SshConfig.java index deb3255..bac7aed 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/config/SshConfig.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/config/SshConfig.java @@ -1,5 +1,8 @@ package ru.ldeloff.servermonitorbot.config; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import ru.ldeloff.servermonitorbot.model.SshServer; @@ -8,14 +11,8 @@ import java.util.List; @Configuration @ConfigurationProperties(prefix = "ssh") +@Getter +@Setter public class SshConfig { private List servers; - - public List getServers() { - return servers; - } - - public void setServers(List servers) { - this.servers = servers; - } } diff --git a/src/main/java/ru/ldeloff/servermonitorbot/controller/TelegramBotController.java b/src/main/java/ru/ldeloff/servermonitorbot/controller/TelegramBotController.java index 1f0b5ce..c589eab 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/controller/TelegramBotController.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/controller/TelegramBotController.java @@ -7,9 +7,13 @@ import org.telegram.telegrambots.bots.TelegramLongPollingBot; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; import org.telegram.telegrambots.meta.api.objects.Update; import org.telegram.telegrambots.meta.exceptions.TelegramApiException; +import ru.ldeloff.servermonitorbot.model.Role; import ru.ldeloff.servermonitorbot.model.TelegramBot; +import ru.ldeloff.servermonitorbot.model.User; import ru.ldeloff.servermonitorbot.repository.SshRepository; import ru.ldeloff.servermonitorbot.service.TelegramBotService; +import ru.ldeloff.servermonitorbot.service.role.RoleService; +import ru.ldeloff.servermonitorbot.service.user.UserService; import ru.ldeloff.servermonitorbot.utils.ui.TelegramBotKeyboard; import ru.ldeloff.servermonitorbot.utils.ui.uname.UnameChatButtonAggregate; @@ -21,32 +25,67 @@ public class TelegramBotController extends TelegramLongPollingBot { final TelegramBot telegramBot; final SshRepository sshRepository; final TelegramBotService telegramBotService; + final UserService userService; + final RoleService roleService; @Override public void onUpdateReceived(Update update) { + Role role = getRole(update); if (update.hasMessage()) { if (update.getMessage().hasText()) { String messageText = update.getMessage().getText(); switch (messageText) { case "/start" -> { - log.info("Получена команда '" + messageText - + "' от " + update.getMessage().getChat().getUserName()); - telegramBotService.firstUse(update, this); + if (role.getId() < 3) { + log.info("Получена команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). OK"); + telegramBotService.firstUse(update, this); + } else { + log.warn("Получена команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } } case "Статус" -> { - log.info("Получена команда '" + messageText - + "' от " + update.getMessage().getChat().getUserName()); - telegramBotService.getStatusSessions(update, this); + if (role.getId() < 3) { + log.info("Получена команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). OK"); + telegramBotService.getStatusSessions(update, this); + } else { + log.warn("Получена команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } } case "uname" -> { - log.info("Получена команда '" + messageText - + "' от " + update.getMessage().getChat().getUserName()); - telegramBotService.sendUnameAggregate(update, this); + if (role.getId() < 3) { + log.info("Получена команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). OK"); + telegramBotService.sendUnameAggregate(update, this); + } else { + log.warn("Получена команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } } default -> { - log.warn("Неизвестная команда '" + messageText - + "' от " + update.getMessage().getChat().getUserName()); - telegramBotService.switchToMainMenu(update, this); + if (role.getId() < 3) { + log.warn("Неизвестная команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). ОК"); + telegramBotService.switchToMainMenu(update, this); + } else { + log.warn("Неизвестная команда '" + messageText + + "' от " + update.getMessage().getChat().getUserName() + + " (" + update.getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } } } } @@ -56,20 +95,44 @@ public class TelegramBotController extends TelegramLongPollingBot { if (tags.length > 1) { switch (tags[0]) { case "uname": - log.info("Получена команда '" + messageText - + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName()); - telegramBotService.uname(update, this); + if (role.getId() < 3) { + log.info("Получена команда '" + messageText + + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName() + + " (" + update.getCallbackQuery().getMessage().getChat().getId() + "). ОК"); + telegramBotService.uname(update, this); + } else { + log.info("Получена команда '" + messageText + + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName() + + " (" + update.getCallbackQuery().getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } break; default: - log.warn("Неизвестная команда '" + messageText - + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName()); - telegramBotService.switchToMainMenu(update, this); + if (role.getId() < 3) { + log.warn("Неизвестная команда '" + messageText + + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName() + + " (" + update.getCallbackQuery().getMessage().getChat().getId() + "). ОК"); + telegramBotService.switchToMainMenu(update, this); + } else { + log.warn("Неизвестная команда '" + messageText + + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName() + + " (" + update.getCallbackQuery().getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } break; } } else { + if (role.getId() < 3) { log.warn("Неверный формат команды '" + messageText - + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName()); + + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName() + + " (" + update.getCallbackQuery().getMessage().getChat().getId() + "). ОК"); telegramBotService.switchToMainMenu(update, this); + } else { + log.warn("Неверный формат команды '" + messageText + + "' от " + update.getCallbackQuery().getMessage().getChat().getUserName() + + " (" + update.getCallbackQuery().getMessage().getChat().getId() + "). Нет прав"); + telegramBotService.notAuthorization(update, this); + } } } } @@ -89,4 +152,19 @@ public class TelegramBotController extends TelegramLongPollingBot { super.onClosing(); sshRepository.disconnectSessions(); } + + private Role getRole(Update update) { + Long id = null; + if (update.hasMessage()) { + id = update.getMessage().getChat().getId(); + } else if (update.hasCallbackQuery()) { + id = update.getCallbackQuery().getMessage().getChat().getId(); + } + User user = userService.getByTelegramId(id); + if (user == null) { + return roleService.findRoleById(3L); + } else { + return user.getRole(); + } + } } diff --git a/src/main/java/ru/ldeloff/servermonitorbot/repository/RoleRepository.java b/src/main/java/ru/ldeloff/servermonitorbot/repository/RoleRepository.java new file mode 100644 index 0000000..4bb81ec --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/repository/RoleRepository.java @@ -0,0 +1,13 @@ +package ru.ldeloff.servermonitorbot.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import ru.ldeloff.servermonitorbot.model.Role; + +import java.util.Optional; + +@Repository +public interface RoleRepository extends JpaRepository { + Optional findRoleByName(String name); + Optional findRoleById(Long id); +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/repository/UserRepository.java b/src/main/java/ru/ldeloff/servermonitorbot/repository/UserRepository.java new file mode 100644 index 0000000..ceaacd3 --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/repository/UserRepository.java @@ -0,0 +1,10 @@ +package ru.ldeloff.servermonitorbot.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import ru.ldeloff.servermonitorbot.model.User; + +@Repository +public interface UserRepository extends JpaRepository { + User getByTelegramId(long id); +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotService.java b/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotService.java index cf86879..507a7fc 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotService.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotService.java @@ -9,5 +9,6 @@ public interface TelegramBotService { void getStatusSessions(Update update, TelegramBotController bot); void sendUnameAggregate(Update update, TelegramBotController bot); void uname(Update update, TelegramBotController bot); - void firstUse(Update update, TelegramBotController telegramBotController); + void firstUse(Update update, TelegramBotController bot); + void notAuthorization(Update update, TelegramBotController bot); } diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotServiceImpl.java b/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotServiceImpl.java index 53df118..84b24af 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotServiceImpl.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/TelegramBotServiceImpl.java @@ -31,6 +31,28 @@ public class TelegramBotServiceImpl implements TelegramBotService { message.setChatId(chatId); sendMessage(telegramBotKeyboard.uiForm(message), bot); } + + @Override + public void notAuthorization(Update update, TelegramBotController bot) { + long id = 0L; + String login = null; + long chatId = 0L; + if (update.hasMessage()) { + id = update.getMessage().getChat().getId(); + login = update.getMessage().getChat().getUserName(); + chatId = update.getMessage().getChatId(); + } else if (update.hasCallbackQuery()) { + id = update.getCallbackQuery().getMessage().getChat().getId(); + login = update.getCallbackQuery().getMessage().getChat().getUserName(); + chatId = update.getCallbackQuery().getMessage().getChatId(); + } + SendMessage message = new SendMessage(); + message.setText("У пользователя " + login + + " (" + id + ") недостаточно прав для выполнения этой команды"); + message.setChatId(chatId); + sendMessage(message, bot); + } + @Override public void switchToMainMenu(Update update, TelegramBotController bot) { SendMessage message = new SendMessage(); diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleService.java b/src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleService.java new file mode 100644 index 0000000..b26d5e1 --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleService.java @@ -0,0 +1,9 @@ +package ru.ldeloff.servermonitorbot.service.role; + +import ru.ldeloff.servermonitorbot.model.Role; + +public interface RoleService { + Role findRoleByName(String name); + + Role findRoleById(Long id); +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleServiceImpl.java b/src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleServiceImpl.java new file mode 100644 index 0000000..6cf52a8 --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/role/RoleServiceImpl.java @@ -0,0 +1,28 @@ +package ru.ldeloff.servermonitorbot.service.role; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import ru.ldeloff.servermonitorbot.model.Role; +import ru.ldeloff.servermonitorbot.repository.RoleRepository; + +import java.util.Locale; +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class RoleServiceImpl implements RoleService { + private final RoleRepository roleRepository; + + @Override + public Role findRoleByName(String name) { + Optional role = roleRepository.findRoleByName(name.toUpperCase(Locale.ROOT)); + //noinspection OptionalGetWithoutIsPresent + return role.orElseGet(() -> roleRepository.findRoleByName("ANONYMOUS").get()); + } + + @Override + public Role findRoleById(Long id) { + Optional role = roleRepository.findRoleById(id); + return role.orElseGet(() -> roleRepository.findRoleByName("ANONYMOUS").get()); + } +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/user/UserService.java b/src/main/java/ru/ldeloff/servermonitorbot/service/user/UserService.java new file mode 100644 index 0000000..e7ea1ff --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/user/UserService.java @@ -0,0 +1,9 @@ +package ru.ldeloff.servermonitorbot.service.user; + +import ru.ldeloff.servermonitorbot.model.User; + +public interface UserService { + User saveOrUpdateUser(User user); + + User getByTelegramId(Long id); +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/service/user/UserServiceImpl.java b/src/main/java/ru/ldeloff/servermonitorbot/service/user/UserServiceImpl.java new file mode 100644 index 0000000..ff2844a --- /dev/null +++ b/src/main/java/ru/ldeloff/servermonitorbot/service/user/UserServiceImpl.java @@ -0,0 +1,29 @@ +package ru.ldeloff.servermonitorbot.service.user; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import ru.ldeloff.servermonitorbot.model.User; +import ru.ldeloff.servermonitorbot.repository.UserRepository; + +@Service +@RequiredArgsConstructor +@Slf4j +public class UserServiceImpl implements UserService { + + final UserRepository userRepository; + + @Override + public User saveOrUpdateUser(User user) { + User existUser = userRepository.getByTelegramId(user.getTelegramId()); + if (existUser != null) { + user.setId(existUser.getId()); + } + return userRepository.save(user); + } + + @Override + public User getByTelegramId(Long id) { + return userRepository.getByTelegramId(id); + } +} diff --git a/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/TelegramBotKeyboard.java b/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/TelegramBotKeyboard.java index 3ab4b9f..a07a478 100644 --- a/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/TelegramBotKeyboard.java +++ b/src/main/java/ru/ldeloff/servermonitorbot/utils/ui/TelegramBotKeyboard.java @@ -17,8 +17,8 @@ public class TelegramBotKeyboard implements UiFormer { @Override public SendMessage uiForm(SendMessage message) { ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup(); - replyKeyboardMarkup.setResizeKeyboard(true); //подгоняем размер - replyKeyboardMarkup.setOneTimeKeyboard(false); //скрываем после использования + replyKeyboardMarkup.setResizeKeyboard(true); + replyKeyboardMarkup.setOneTimeKeyboard(false); ArrayList keyboardRows = new ArrayList<>();