@@ -6,6 +6,7 @@ use std::str::FromStr;
6
6
use thiserror:: Error ;
7
7
8
8
use crate :: schema:: persistent_sessions;
9
+ use crate :: util:: token:: NewSecureToken ;
9
10
use crate :: util:: token:: SecureToken ;
10
11
use crate :: util:: token:: SecureTokenKind ;
11
12
@@ -31,12 +32,10 @@ pub struct PersistentSession {
31
32
}
32
33
33
34
impl PersistentSession {
34
- /// Creates a `NewPersistentSession` that can be inserted into the database.
35
- pub fn create < ' a > ( user_id : i32 , token : & ' a SecureToken ) -> NewPersistentSession < ' a > {
36
- NewPersistentSession {
37
- user_id,
38
- hashed_token : token,
39
- }
35
+ /// Creates a `NewPersistentSession` for the `user_id` and the token associated with it.
36
+ pub fn create < ' a > ( user_id : i32 ) -> NewPersistentSession {
37
+ let token = SecureToken :: generate ( SecureTokenKind :: Session ) ;
38
+ NewPersistentSession { user_id, token }
40
39
}
41
40
42
41
/// Finds the session with the ID.
@@ -81,19 +80,32 @@ impl PersistentSession {
81
80
}
82
81
83
82
/// A new, insertable persistent session.
84
- #[ derive( Clone , Debug , PartialEq , Eq , Insertable ) ]
85
- #[ table_name = "persistent_sessions" ]
86
- pub struct NewPersistentSession < ' a > {
83
+ pub struct NewPersistentSession {
87
84
user_id : i32 ,
88
- hashed_token : & ' a SecureToken ,
85
+ token : NewSecureToken ,
89
86
}
90
87
91
- impl NewPersistentSession < ' _ > {
88
+ impl NewPersistentSession {
92
89
/// Inserts the session into the database.
93
- pub fn insert ( self , conn : & PgConnection ) -> Result < PersistentSession , diesel:: result:: Error > {
94
- diesel:: insert_into ( persistent_sessions:: table)
95
- . values ( self )
96
- . get_result ( conn)
90
+ ///
91
+ /// # Returns
92
+ ///
93
+ /// The
94
+ pub fn insert (
95
+ self ,
96
+ conn : & PgConnection ,
97
+ ) -> Result < ( PersistentSession , SessionCookie ) , diesel:: result:: Error > {
98
+ let session: PersistentSession = diesel:: insert_into ( persistent_sessions:: table)
99
+ . values ( (
100
+ persistent_sessions:: user_id. eq ( & self . user_id ) ,
101
+ persistent_sessions:: hashed_token. eq ( & * self . token ) ,
102
+ ) )
103
+ . get_result ( conn) ?;
104
+ let id = session. id ;
105
+ Ok ( (
106
+ session,
107
+ SessionCookie :: new ( id, self . token . plaintext ( ) . to_string ( ) ) ,
108
+ ) )
97
109
}
98
110
}
99
111
0 commit comments