1 /**
2 * Copyright © DiamondMVC 2019
3 * License: MIT (https://github.com/DiamondMVC/Diamond/blob/master/LICENSE)
4 * Author: Jacob Jensen (bausshf)
5 */
6 module diamond.security.tokens.sessiontoken;
7
8 import diamond.core.apptype;
9
10 static if (isWeb)
11 {
12 import diamond.security.tokens.tokengenerator;
13
14 /// Wrapper for a session token generator.
15 final class SessionToken : TokenGenerator
16 {
17 private:
18 /// Creates a new instance of the session token generator.
19 this()
20 {
21 super();
22 }
23
24 public:
25 /**
26 * Generates a token.
27 * Returns:
28 * Returns the generated token.
29 */
30 override string generate()
31 {
32 import diamond.security.tokens.generictoken;
33
34 return genericToken.generate();
35 }
36
37 /**
38 * Generates a token based on an input.
39 * Params:
40 * input = An input to append to the token.
41 * Returns:
42 * Returns the generated token.
43 */
44 override string generate(string input)
45 {
46 import diamond.core.senc;
47
48 return generate() ~ SENC.encode(input);
49 }
50
51 /**
52 * Generates a token and passes it to the parent generator.
53 * Params:
54 * parentGenerator = The parent generator to use with the generated token.
55 * Returns:
56 * Returns the generated token.
57 */
58 override string generate(TokenGenerator parentGenerator)
59 {
60 import diamond.errors.checks;
61 enforce(parentGenerator, "Passed no parent generator.");
62
63 return parentGenerator.generate(this.generate());
64 }
65 }
66
67 /// The session token generator instance for the current thread.
68 private SessionToken _sessionToken;
69
70 @property
71 {
72 /// Gets the session token.
73 SessionToken sessionToken()
74 {
75 if (!_sessionToken)
76 {
77 _sessionToken = new SessionToken;
78 }
79
80 return _sessionToken;
81 }
82 }
83 }