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

    Fields
    Modifier and Type
    Field
    Description
    static final String
     

    Fields 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
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    deleteToken(int id)
    Удалить строку токена из таблицы (план §10).
    Токен по префиксу — первым 16 символам открытого текста токена.
    get(int id)
    Один токен для админки (план §10) по id; скоупы сюда не заполняются, их делает сервис.
    int
    insertToken(String prefix, String tokenHash, String title, int userId, int rateLimit, String comment, LocalDateTime expires)
    Вставить новый токен.
    Все токены MCP для админки (план §10), по порядку id, без пагинации.
    void
    setEnabled(int id, boolean enabled)
    Включить или выключить токен для админки (план §10): отключённый токен существует, но auth его не пропускает.
    void
    updateLastUsed(int tokenId)
     
    void
    updateToken(int id, String title, int userId, int rateLimit, String comment, LocalDateTime expires)
    Обновить поля существующего токена для админки (план §10): название, привязанный пользователь, лимит, комментарий, срок действия. id, prefix и token_hash не меняются.
    void
    updateTokenSecret(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, sqlUpdateBatch

    Methods inherited from class ru.bitel.bgbilling.kernel.base.server.logger.BGLogger

    error, error, error, getLogger, logError, logError, warn

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • Constructor Details

    • McpTokenDao

      public McpTokenDao(Connection con)
  • Method Details

    • findByPrefix

      public McpToken findByPrefix(String prefix)
      Токен по префиксу — первым 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.auth
      tokenHash - SHA-256 сырого токена, hex в нижнем регистре, 64 символа
      title - человекочитаемое имя токена
      userId - id привязанного пользователя
      rateLimit - ограничение скорости, 0 — без ограничения
      comment - произвольный комментарий; может быть null
      expires - срок действия; null — бессрочный токен, в таблице останется SQL NULL, а не «вчера» и не текущий момент
      Returns:
      id вставленной строки; 0, если вставка не удалась. Исключение наружу не бросается — ошибка выпуска не должна ронять вызывающий код, только логируется.
    • updateLastUsed

      public void updateLastUsed(int tokenId)
    • list

      public List<McpTokenInfo> list() throws SQLException
      Все токены MCP для админки (план §10), по порядку id, без пагинации. В строку token_hash не выносится — это секрет; скоупы сюда не заполняются, их делает сервис.
      Returns:
      список токенов; пустой список, если таблица пуста. В отличие от методов auth-пути, ошибка чтения бросается наружу: админка не должна молча показывать пустой список вместо реальной неудачи.
      Throws:
      SQLException
    • get

      public McpTokenInfo get(int id) throws SQLException
      Один токен для админки (план §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 — строка станет NULL
      expires - срок действия; null — бессрочный, в таблице SQL NULL
      Throws:
      SQLException - ошибка обновления не глотается: вызывающий сервис должен увидеть неудачу сохранения, а не молча показывать старый редактор как сохранившийся
    • updateTokenSecret

      public void updateTokenSecret(int id, String prefix, String tokenHash) throws SQLException
      Перевыпустить секрет токена для админки (план §10): заменить префикс и SHA-256 хеш на новые значения. id строки и её скоупы сохраняются, старый секрет перестаёт работать.
      Parameters:
      id - primary key обновляемой строки
      prefix - новый префикс — первые 16 символов нового сырого токена
      tokenHash - SHA-256 нового сырого токена, hex в нижнем регистре
      Throws:
      SQLException - ошибка обновления не глотается: перевыпуск, завершившийся «успехом» на экране, а на деле не сошедшийся, отключил бы действующий токен
    • setEnabled

      public void setEnabled(int id, boolean enabled) throws SQLException
      Включить или выключить токен для админки (план §10): отключённый токен существует, но auth его не пропускает.
      Parameters:
      id - primary key обновляемой строки
      enabled - true — токен действует, false — заморожен
      Throws:
      SQLException - ошибка обновления не глотается: вызывающий сервис должен увидеть, что переключатель не сохранился
    • deleteToken

      public void deleteToken(int id) throws SQLException
      Удалить строку токена из таблицы (план §10). Здесь удаляется только строка mcp_tokens; скоупы (mcp_token_scopes) удаляет вызывающий сервис в одной транзакции с этим вызовом.
      Parameters:
      id - primary key удаляемой строки
      Throws:
      SQLException - ошибка удаления не глотается: если удаление не состоится, токен продолжит работать (auth его не удалит), а в списке админки его уже не будет