Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/timelessnesses/tlns-google-oauth2
An enshitificated Google OAuth2 Server Side support for Rust with built in Scopes enum
https://github.com/timelessnesses/tlns-google-oauth2
actix google login macro oauth2 proc provider rust scopes server web
Last synced: 2 months ago
JSON representation
An enshitificated Google OAuth2 Server Side support for Rust with built in Scopes enum
- Host: GitHub
- URL: https://github.com/timelessnesses/tlns-google-oauth2
- Owner: timelessnesses
- License: mit
- Created: 2024-06-29T12:27:22.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-07-13T06:02:31.000Z (6 months ago)
- Last Synced: 2024-10-31T12:10:23.565Z (2 months ago)
- Topics: actix, google, login, macro, oauth2, proc, provider, rust, scopes, server, web
- Language: Rust
- Homepage: https://crates.io/crates/tlns_google_oauth2
- Size: 280 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# tlns-google-oauth2
A server-side Google OAuth2 authentication with built in scopes for extra type safety.
## Generating scopes enums (for proc macro library part only)
Go to [Google's OAuth2 Scopes Listing](https://developers.google.com/identity/protocols/oauth2/scopes) and start copying from the first header to the final row of the table at the bottom of the document.
![A picture showing the first blue header](./lmao.png)
![A picture showing the last row of the table](./help.png)
Then pasting all of that to the `info.txt` and build the library, it will give you all possible scopes!## Usage ([`crate::grouped_scopes`])
```rust,ignore
use tlns_google_oauth2::GoogleOAuth2Client as Client;
use tlns_google_oauth2::scopes;
let client = Client::new("CLIENT_ID".to_string(), "CLIENT_SECRET".to_string(), "http://localhost:8080/callback".to_string()).expect("Failed to build client");
let auth = client.authorize_url(None, vec![&scopes::GoogleOAuth2APIv2::AuthUserinfoProfile]).unwrap();
let url = auth.0;
let csrf_token = auth.1;
let scopes = auth.2;// ... Callback codes here (You can't save states in oauth2 crate for some reasons :( )
let code = "...";
let token = client.get_token(code.to_string()).await.unwrap();
// Do request stuff
```## Usage ([`crate::scopes::Scopes`])
```rust,ignore
use tlns_google_oauth2::GoogleOAuth2Client as Client;
use tlns_google_oauth2::scopes;
let client = Client::new("CLIENT_ID".to_string(), "CLIENT_SECRET".to_string(), "http://localhost:8080/callback".to_string()).expect("Failed to build client");
let auth = client.authorize_url(None, vec![&scopes::Scopes::AuthUserinfoProfile]).unwrap();
let url = auth.0;
let csrf_token = auth.1;
let scopes = auth.2;// ... Callback codes here (You can't save states in oauth2 crate for some reasons :( )
let code = "...";
let token = client.get_token(code.to_string()).await.unwrap();
// Do request stuff
```## Credits
Thanks [`heapunderfl0w`](https://github.com/heapunderfl0w) for the proc macro idea instead of shitty Jinja2 implementation!