annotate misc/sasl/example.lua @ 5276:67777cb7353d

mod_http_oauth2: Pedantic optimization Checking the length of the string seems like 30% more expensive than comparing it with the empty string (by reference, probably).
author Kim Alvefur <zash@zash.se>
date Sun, 26 Mar 2023 14:37:42 +0200
parents 7d2fcc7a15f7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2354
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 local method = {}
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 local method_mt = { __index = method }
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 -- This should return a set of supported mechanisms
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 function method:mechanisms()
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 return {
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 ["OAUTH-SOMETHING"] = true;
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 }
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 end
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 -- Called when a mechanism is selecetd
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 function method:select(mechanism)
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 return mechanism == "OAUTH-SOMETHING";
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 end
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 -- Called for each message received
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 function method:process(message)
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 -- parse the message
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 if false then
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 -- To send a SASL challenge:
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 return "challenge", "respond-to-this";
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 end
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 if false then
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 -- To fail, send:
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 return "failure", "not-authorized", "Helpful error message here";
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 end
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 self.username = "someone";
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 return "success";
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 end
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 local function new_sasl()
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 return setmetatable({}, method_mt);
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 end
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 function method:clean_clone()
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 return setmetatable({}, method_mt);
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 end
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 local provider = {}
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 function provider.get_sasl_handler()
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 return new_sasl();
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 end
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46
7d2fcc7a15f7 Example SASL mechanism implementation
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 module:provides("auth", provider);