apikey_validator.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. from .apikey import apikey
  2. class apikey_validator:
  3. """
  4. That is API key validator. It check that API key have valid prefix,
  5. size and separator.
  6. """
  7. def __init__(
  8. self,
  9. size: int,
  10. prefix: str,
  11. prefix_separator: str
  12. ) -> None:
  13. """
  14. That is API key validator constructor, it would be used by API key
  15. validator factory, not direct.
  16. Parameters
  17. ----------
  18. size : int
  19. Size of the apikey validator.
  20. prefix : str
  21. Prefix of the API key.
  22. prefix_separator : str
  23. Separator between random part of the API key and prefix.
  24. """
  25. self.__size = size
  26. self.__prefix = prefix
  27. self.__prefix_separator = prefix_separator
  28. @property
  29. def size(self) -> int:
  30. """
  31. Full size of the API key.
  32. Returns
  33. -------
  34. int
  35. Full lenght of the API key.
  36. """
  37. return self.__size
  38. @property
  39. def prefix(self) -> str:
  40. """
  41. Prefix of the API key.
  42. Returns
  43. -------
  44. str
  45. Prefix of the API key.
  46. """
  47. return self.__prefix
  48. @property
  49. def prefix_separator(self) -> str:
  50. """
  51. Character between prefix and random part of the API key.
  52. Returns
  53. -------
  54. str
  55. Separator character.
  56. """
  57. return self.__prefix_separator
  58. def validate(self, content: str | apikey) -> bool:
  59. """
  60. That validate API key, check that it prefix, prefix separator and
  61. size if proof.
  62. Parameters
  63. ----------
  64. content : str | apikey
  65. Target to validate that is proof API key.
  66. Returns
  67. -------
  68. bool
  69. Result of the validation. True when valid, False when invalid.
  70. """
  71. if type(content) is not str:
  72. content = str(content)
  73. parts = content.split(self.prefix_separator)
  74. if len(parts) != 2:
  75. return False
  76. prefix = parts[0]
  77. token = parts[1]
  78. if prefix != self.prefix:
  79. return False
  80. if len(content) != self.size:
  81. return False
  82. if len(token) % 2 != 0:
  83. token = token + "0"
  84. try:
  85. bytes_token = bytes.fromhex(token)
  86. except:
  87. return False
  88. return True