Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
name: Bug Report
about: Create a report to help us improve
title: "[BUG] "
labels: bug
assignees: ''
---

## Description
A clear and concise description of what the bug is.

## Steps to Reproduce
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

## Expected Behavior
A clear and concise description of what you expected to happen.

## Actual Behavior
A clear and concise description of what actually happened.

## Environment
- OS: [e.g. Windows 11, Ubuntu 22.04, macOS 14]
- Python Version: [e.g. 3.10.12]
- apiauth Version: [e.g. 0.2.0]

## Additional Context
Add any other context about the problem here (logs, screenshots, etc.).

## Checklist
- [ ] I have searched existing issues to avoid duplicates
- [ ] I have provided all relevant information above
32 changes: 32 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
name: Feature Request
about: Suggest an idea for this project
title: "[FEATURE] "
labels: enhancement
assignees: ''
---

## Problem Statement
A clear and concise description of what problem this feature would solve. Is your feature request related to a problem? Please describe.

## Proposed Solution
A clear and concise description of what you want to happen.

## Alternative Solutions
A clear and concise description of any alternative solutions or features you've considered.

## Use Cases
Describe specific use cases where this feature would be helpful:
1. Use case 1
2. Use case 2
3. Use case 3

## Implementation Ideas (Optional)
If you have ideas on how this in mind, share technical considerations or implementation approaches.

## Additional Context
Add any other context or screenshots about the feature request here.

## Checklist
- [ ] I have searched existing issues to avoid duplicates
- [ ] This feature aligns with the project's scope (API key/JWT lifecycle management)
42 changes: 42 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
## Description
<!-- Provide a clear and concise description of the changes in this PR -->

## Type of Change
<!-- Check all that apply -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation update
- [ ] Dependency update
- [ ] Refactoring / Code quality
- [ ] CI/CD changes

## Related Issues
<!-- Link any related issues using "Fixes #123", "Closes #456", etc. -->

## Changes Made
<!-- List the specific changes made in this PR -->
1.
2.
3.

## Testing
<!-- Describe how you tested these changes -->
- [ ] All existing tests pass (`pytest tests/ -v`)
- [ ] Linting passes (`ruff check src/ --target-version py310`)
- [ ] Manual testing performed:
- [ ] CLI commands work as expected
- [ ] Edge cases covered

## Checklist
- [ ] My code follows the project's style guidelines (ruff)
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] New and existing unit tests pass locally
- [ ] I have updated documentation as needed (README, CHANGELOG, docstrings)
- [ ] Any dependent changes have been merged and published

## Screenshots / Logs (if applicable)
<!-- Add screenshots or relevant log output here -->

## Additional Notes
<!-- Any additional information, configuration, or data that might be necessary to reproduce or verify the changes -->
22 changes: 11 additions & 11 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
version: 2
updates:
- package-ecosystem: pip
directory: "/"
schedule:
interval: weekly
open-pull-requests-limit: 5
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: weekly
version: 2
updates:
- package-ecosystem: pip
directory: "/"
schedule:
interval: weekly
open-pull-requests-limit: 5
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: weekly
open-pull-requests-limit: 3
56 changes: 28 additions & 28 deletions .github/workflows/auto-code-review.yml
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
# Automated Code Review — caller workflow
#
# Drop this file into any Coding-Dev-Tools repo at
# .github/workflows/auto-code-review.yml to enable
# automated PR code review (lint, format, secret detection,
# TODO/FIXME check, large file check, and PR comment summary).
#
# The reusable workflow is defined in the org .github repo:
# Coding-Dev-Tools/.github/.github/workflows/auto-code-review.yml@main
name: Auto Code Review
on:
pull_request:
branches: [main, master]
types: [opened, synchronize, reopened]
push:
branches: [main, master]
workflow_dispatch:
permissions:
contents: read
pull-requests: write
security-events: write
jobs:
code-review:
uses: Coding-Dev-Tools/.github/.github/workflows/auto-code-review.yml@main
# Automated Code Review — caller workflow
#
# Drop this file into any Coding-Dev-Tools repo at
# .github/workflows/auto-code-review.yml to enable
# automated PR code review (lint, format, secret detection,
# TODO/FIXME check, large file check, and PR comment summary).
#
# The reusable workflow is defined in the org .github repo:
# Coding-Dev-Tools/.github/.github/workflows/auto-code-review.yml@main

name: Auto Code Review

on:
pull_request:
branches: [main, master]
types: [opened, synchronize, reopened]
push:
branches: [main, master]
workflow_dispatch:

permissions:
contents: read
pull-requests: write
security-events: write

jobs:
code-review:
uses: Coding-Dev-Tools/.github/.github/workflows/auto-code-review.yml@main
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,5 @@ Thumbs.db
.ruff_cache/

# Local opencode config
AGENTS.md
.agents/

30 changes: 30 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# apiauth

## Purpose
CLI tool for API key and JWT lifecycle management with encrypted local store — generate, store, verify, rotate, and revoke keys with an encrypted local keystore.

## Build & Test Commands
- Install: `pip install -e .` or `pip install apiauth`
- Test: `pytest tests/` (or `python -m pytest tests/ -v --tb=short`)
- Lint: `ruff check src/ --target-version py310`
- Build: `pip wheel . --wheel-dir dist/`
- CLI check: `apiauth --version && apiauth --help`

## Architecture
Key directories:
- `src/apiauth/` — Main package (CLI, keystore, crypto, commands)
- `tests/` — Test suite
- `.github/workflows/` — CI/CD (auto-code-review.yml, ci.yml, publish.yml)
- `dist/` — Built distributions

## Conventions
- Language: Python 3.10+
- Test framework: pytest
- CI: GitHub Actions (matrix: Python 3.10, 3.11, 3.12, 3.13)
- Linting: ruff (line-length 120, target py310)
- Formatting: ruff
- Package layout: src/ layout with setuptools
- Type checking: py.typed included
- Dependencies: click, cryptography, pyjwt, rich, python-dateutil
- CLI entry point: apiauth.cli:cli
- Master branch: master
90 changes: 45 additions & 45 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,45 +1,45 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- Directory listing badges: Open Source Alternative, LibHunt, Awesome Python
- Sibling tool cross-links in README footer
### Changed
- CI security hardened: `persist-credentials: false`, restricted permissions
- Documentation branding updated from DevForge to Revenue Holdings
- README rewritten with pricing table, Why hook, Revenue Holdings branding
- Tool count corrected to 11
- Project URLs added to `pyproject.toml`
- CI badge corrected to reference ci.yml
### Fixed
- CI workflow: consolidated duplicate workflows, hardened security, updated actions
- CI publish workflow: downgraded actions/checkout@v6 and setup-python@v6 to v4/v5 (v6 does not exist)
- PyPI token check moved to job-level if (secrets context not available at step level)
- CI workflow simplified to avoid workflow parse failures
- UTF-8 encoding (mojibake) in file output
- Ruff lint issues: `datetime.UTC`, `X | None` syntax, `E501`, `B904`, `F821`
- Missing `ruff` dev dependency (caused CI `ruff: command not found`)
- Stray `verify.py` removed (logic lives in `keygen.py`)
- Tests updated for new `verify_api_key` return format (status instead of valid)
## [0.1.0] — 2025-05-17
### Added
- Initial beta release
- Core functionality
- CLI interface
- Test suite
- CI/CD workflows with ruff lint and pytest
- CONTRIBUTING.md
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added

- Directory listing badges: Open Source Alternative, LibHunt, Awesome Python
- Sibling tool cross-links in README footer

### Changed

- CI security hardened: `persist-credentials: false`, restricted permissions
- Documentation branding updated from DevForge to Revenue Holdings
- README rewritten with pricing table, Why hook, Revenue Holdings branding
- Tool count corrected to 11
- Project URLs added to `pyproject.toml`
- CI badge corrected to reference ci.yml

### Fixed

- CI workflow: consolidated duplicate workflows, hardened security, updated actions
- CI publish workflow: downgraded actions/checkout@v6 and setup-python@v6 to v4/v5 (v6 does not exist)
- PyPI token check moved to job-level if (secrets context not available at step level)
- CI workflow simplified to avoid workflow parse failures
- UTF-8 encoding (mojibake) in file output
- Ruff lint issues: `datetime.UTC`, `X | None` syntax, `E501`, `B904`, `F821`
- Missing `ruff` dev dependency (caused CI `ruff: command not found`)
- Stray `verify.py` removed (logic lives in `keygen.py`)
- Tests updated for new `verify_api_key` return format (status instead of valid)

## [0.1.0] — 2025-05-17

### Added

- Initial beta release
- Core functionality
- CLI interface
- Test suite
- CI/CD workflows with ruff lint and pytest
- CONTRIBUTING.md
42 changes: 21 additions & 21 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
MIT License
Copyright (c) 2026 Revenue Holdings
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
MIT License

Copyright (c) 2026 Revenue Holdings

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Loading