1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//! OAuth2 core module for authentication and authorization.
//!
//! This module provides abstractions and implementations for handling OAuth2 flows,
//! including generating authorization URLs, exchanging codes for tokens, fetching user info,
//! and refreshing tokens. It is designed to support multiple providers and extensible flows.
//!
//! # Modules
//!
//! - `manager`: Contains the logic for managing OAuth2 operations and provider-specific details.
//! - `store`: Defines types and storage mechanisms for OAuth2 tokens, user info, and providers.
//!
//! # Traits
//!
//! - [`OAuth2Service`]: The main trait for interacting with OAuth2 providers.
use async_trait;
/// Trait for handling OAuth2 authentication and authorization flows.
///
/// Implementors of this trait provide methods for generating authorization URLs,
/// exchanging authorization codes for tokens, fetching user information, and refreshing tokens.
/// This trait is designed to be provider-agnostic and extensible for various OAuth2 providers.
///
/// # Example
///
/// ```rust,ignore
/// let url = service.generate_auth_url(provider, state, Some(vec!["email".to_string()])).await?;
/// ```
/// OAuth2 manager module: contains logic for managing provider-specific operations.
/// OAuth2 store module: defines types and storage for tokens, user info, and providers.