Class McpTokenDao
java.lang.Object
ru.bitel.bgbilling.kernel.base.server.logger.BGLogger
ru.bitel.bgbilling.common.dao.AbstractDaoConstant
ru.bitel.bgbilling.plugins.mcp.server.dao.McpTokenDao
public class McpTokenDao
extends ru.bitel.bgbilling.common.dao.AbstractDaoConstant
-
Field Summary
FieldsFields inherited from class ru.bitel.bgbilling.common.dao.AbstractDaoConstant
con, ERROR, fields, moduleId, SQL_ALL, SQL_AND, SQL_DELETE, SQL_DISTINCT, SQL_EQ, SQL_EQCS, SQL_FROM, SQL_GROUP, SQL_IN, SQL_INSERT, SQL_JOIN, SQL_LEFT_JOIN, SQL_LIMIT, SQL_NOT_IN, SQL_ON, SQL_ORDER, SQL_SELECT, SQL_SET, SQL_UPDATE, SQL_VALUES, SQL_WHERE, tableName -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoiddeleteToken(int id) Удалить строку токена из таблицы (план §10).findByPrefix(String prefix) Токен по префиксу — первым 16 символам открытого текста токена.get(int id) Один токен для админки (план §10) по id; скоупы сюда не заполняются, их делает сервис.intinsertToken(String prefix, String tokenHash, String title, int userId, int rateLimit, String comment, LocalDateTime expires) Вставить новый токен.list()Все токены MCP для админки (план §10), по порядку id, без пагинации.voidsetEnabled(int id, boolean enabled) Включить или выключить токен для админки (план §10): отключённый токен существует, но auth его не пропускает.voidupdateLastUsed(int tokenId) voidupdateToken(int id, String title, int userId, int rateLimit, String comment, LocalDateTime expires) Обновить поля существующего токена для админки (план §10): название, привязанный пользователь, лимит, комментарий, срок действия. id, prefix и token_hash не меняются.voidupdateTokenSecret(int id, String prefix, String tokenHash) Перевыпустить секрет токена для админки (план §10): заменить префикс и SHA-256 хеш на новые значения. id строки и её скоупы сохраняются, старый секрет перестаёт работать.Methods inherited from class ru.bitel.bgbilling.common.dao.AbstractDaoConstant
getPeriod, getPlaceholders, getSQLOrder, getSQLOrderFields, getTableName, psSetDate, psSetDateOrNull, psSetInt, psSetIntOrNull, psSetPeriod, psSetString, psSetStringOrNull, psSetTimestampOrNull, queryAndIn, setStatementParam, sqlDelete, sqlDeleteBatch, sqlInsert, sqlInsertBatch, sqlInsertGetId, sqlInsertGetLongId, sqlInsertOnDuplicateKeyUpdate, sqlInsertSelect, sqlInsertUpdateById, sqlSelectCountAsInt, sqlUpdate, sqlUpdateBatchMethods inherited from class ru.bitel.bgbilling.kernel.base.server.logger.BGLogger
error, error, error, getLogger, logError, logError, warn
-
Field Details
-
TABLE_MCP_TOKENS
- See Also:
-
-
Constructor Details
-
McpTokenDao
-
-
Method Details
-
findByPrefix
Токен по префиксу — первым 16 символам открытого текста токена.- Parameters:
prefix- префикс токена, ровно то, что лежит в колонкеprefix- Returns:
- сохранённый токен; null, если префикс не найден или чтение не удалось
-
insertToken
public int insertToken(String prefix, String tokenHash, String title, int userId, int rateLimit, String comment, LocalDateTime expires) Вставить новый токен. Сырой токен сюда не передаётся и нигде не сохраняется — в таблицу уходят только префикс и SHA-256 хеш; сырой текст должен быть отдан вызывающему ровно один раз.- Parameters:
prefix- префикс — первые 16 символов сырого токена; правило совпадает с поиском в McpAuthService.authtokenHash- SHA-256 сырого токена, hex в нижнем регистре, 64 символаtitle- человекочитаемое имя токенаuserId- id привязанного пользователяrateLimit- ограничение скорости, 0 — без ограниченияcomment- произвольный комментарий; может быть nullexpires- срок действия; null — бессрочный токен, в таблице останется SQL NULL, а не «вчера» и не текущий момент- Returns:
- id вставленной строки; 0, если вставка не удалась. Исключение наружу не бросается — ошибка выпуска не должна ронять вызывающий код, только логируется.
-
updateLastUsed
public void updateLastUsed(int tokenId) -
list
Все токены MCP для админки (план §10), по порядку id, без пагинации. В строку token_hash не выносится — это секрет; скоупы сюда не заполняются, их делает сервис.- Returns:
- список токенов; пустой список, если таблица пуста. В отличие от методов auth-пути, ошибка чтения бросается наружу: админка не должна молча показывать пустой список вместо реальной неудачи.
- Throws:
SQLException
-
get
Один токен для админки (план §10) по id; скоупы сюда не заполняются, их делает сервис.- Parameters:
id- primary key из таблицы mcp_tokens- Returns:
- строка токена, либо null, если токена с таким id нет. Ошибка чтения бросается наружу.
- Throws:
SQLException
-
updateToken
public void updateToken(int id, String title, int userId, int rateLimit, String comment, LocalDateTime expires) throws SQLException Обновить поля существующего токена для админки (план §10): название, привязанный пользователь, лимит, комментарий, срок действия. id, prefix и token_hash не меняются.- Parameters:
id- primary key обновляемой строкиtitle- новое название токенаuserId- id привязанного пользователяrateLimit- ограничение скорости, 0 — без ограниченияcomment- комментарий; может быть null — строка станет NULLexpires- срок действия; null — бессрочный, в таблице SQL NULL- Throws:
SQLException- ошибка обновления не глотается: вызывающий сервис должен увидеть неудачу сохранения, а не молча показывать старый редактор как сохранившийся
-
updateTokenSecret
Перевыпустить секрет токена для админки (план §10): заменить префикс и SHA-256 хеш на новые значения. id строки и её скоупы сохраняются, старый секрет перестаёт работать.- Parameters:
id- primary key обновляемой строкиprefix- новый префикс — первые 16 символов нового сырого токенаtokenHash- SHA-256 нового сырого токена, hex в нижнем регистре- Throws:
SQLException- ошибка обновления не глотается: перевыпуск, завершившийся «успехом» на экране, а на деле не сошедшийся, отключил бы действующий токен
-
setEnabled
Включить или выключить токен для админки (план §10): отключённый токен существует, но auth его не пропускает.- Parameters:
id- primary key обновляемой строкиenabled- true — токен действует, false — заморожен- Throws:
SQLException- ошибка обновления не глотается: вызывающий сервис должен увидеть, что переключатель не сохранился
-
deleteToken
Удалить строку токена из таблицы (план §10). Здесь удаляется только строка mcp_tokens; скоупы (mcp_token_scopes) удаляет вызывающий сервис в одной транзакции с этим вызовом.- Parameters:
id- primary key удаляемой строки- Throws:
SQLException- ошибка удаления не глотается: если удаление не состоится, токен продолжит работать (auth его не удалит), а в списке админки его уже не будет
-