|
1 | 1 | # PermLens |
2 | 2 |
|
3 | | -PermLens provides human-readable visibility into GitHub App permissions and data access using publicly available metadata. |
| 3 | +Permission transparency and privacy labeling for GitHub Apps. |
4 | 4 |
|
5 | | -## What PermLens Does |
6 | | -- Explains GitHub App permissions in plain language |
7 | | -- Groups permissions into clear data access categories |
8 | | -- Generates privacy-label-style summaries |
9 | 5 |
|
10 | | -## What PermLens Does Not Do |
11 | | -- Inspect application behavior or source code |
12 | | -- Scan repositories or workflows |
| 6 | +## What is PermLens? |
| 7 | + |
| 8 | +PermLens provides human-readable visibility into **GitHub App permissions** and the types of data an app may access, using **publicly available metadata**. |
| 9 | + |
| 10 | +It generates a structured, privacy-label-style summary based on an app’s declared permissions, helping developers and reviewers better understand permission scope at a glance. |
| 11 | + |
| 12 | +PermLens is an **informational transparency tool**, not a security scanner. |
| 13 | + |
| 14 | + |
| 15 | +## What PermLens does |
| 16 | + |
| 17 | +- Fetches declared GitHub App permissions via the GitHub API |
| 18 | +- Explains permissions in clear, plain language |
| 19 | +- Groups permissions into predefined data access categories |
| 20 | +- Generates a structured privacy label with sensitivity levels |
| 21 | + |
| 22 | +The output is designed to be predictable, auditable, and safe to consume programmatically. |
| 23 | + |
| 24 | + |
| 25 | +## What PermLens does NOT do |
| 26 | + |
| 27 | +PermLens does **not**: |
| 28 | + |
| 29 | +- Inspect application source code or runtime behavior |
| 30 | +- Scan repositories, workflows, or network activity |
| 31 | +- Access private repositories or user data |
| 32 | +- Act on behalf of users or organizations |
13 | 33 | - Guarantee security, safety, or compliance |
14 | 34 |
|
15 | | -PermLens is an informational tool designed to improve transparency, not to audit or enforce policies. |
| 35 | +PermLens reflects **what an app declares**, not what it actually does at runtime. |
| 36 | + |
| 37 | + |
| 38 | +## How it works |
| 39 | + |
| 40 | +1. Authenticates as a GitHub App using JWT |
| 41 | +2. Fetches the app’s declared permissions from the GitHub API |
| 42 | +3. Maps permissions to predefined data access categories |
| 43 | +4. Generates a privacy label with category details and sensitivity level |
| 44 | + |
| 45 | +Only public GitHub App metadata is used. |
| 46 | + |
| 47 | + |
| 48 | +## API |
| 49 | + |
| 50 | +### Get privacy label for a GitHub App |
| 51 | + |
| 52 | +```http |
| 53 | +GET /api/app/:slug/label |
| 54 | +``` |
| 55 | + |
| 56 | +Example response: |
| 57 | + |
| 58 | +```json |
| 59 | +{ |
| 60 | + "data_categories": [ |
| 61 | + { |
| 62 | + "key": "repository_metadata", |
| 63 | + "label": "Repository metadata", |
| 64 | + "sensitivity": "low", |
| 65 | + "description": "Basic information about repositories without access to file contents." |
| 66 | + } |
| 67 | + ], |
| 68 | + "overall_sensitivity": "low", |
| 69 | + "permissions": [ |
| 70 | + { |
| 71 | + "name": "metadata", |
| 72 | + "access": "read" |
| 73 | + } |
| 74 | + ], |
| 75 | + "notes": [ |
| 76 | + "Derived from declared GitHub App permissions.", |
| 77 | + "Based on public metadata only; no runtime inspection." |
| 78 | + ] |
| 79 | +} |
| 80 | +``` |
| 81 | + |
| 82 | + |
| 83 | +## Project status |
| 84 | + |
| 85 | +PermLens is in **early development**. |
| 86 | + |
| 87 | +Version **v0.1.0** provides: |
| 88 | + |
| 89 | +- A stable backend API |
| 90 | +- GitHub App authentication |
| 91 | +- Core privacy label generation logic |
| 92 | + |
| 93 | +APIs and schemas may evolve as the project matures. |
| 94 | +A frontend interface is planned for a future release. |
| 95 | + |
| 96 | + |
| 97 | +## Security and privacy |
| 98 | + |
| 99 | +- Uses GitHub App authentication (JWT-based) |
| 100 | +- Requests minimal, read-only access |
| 101 | +- Uses public GitHub metadata only |
| 102 | +- Does not store user, repository, or organization data |
| 103 | + |
| 104 | + |
| 105 | +## License |
16 | 106 |
|
17 | | -## Status |
18 | | -PermLens is under active development. APIs and schemas may change prior to v1. |
| 107 | +Released under the terms of [Apache License 2.0](LICENSE). |
0 commit comments