Mercurial Hosting > chat
comparison src/lib/User.luan @ 3:2c63b10781e1
add login
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 24 Oct 2024 21:43:44 -0600 |
parents | ee1f91e67509 |
children | 2da10ece826f |
comparison
equal
deleted
inserted
replaced
2:ee1f91e67509 | 3:2c63b10781e1 |
---|---|
1 local Luan = require "luan:Luan.luan" | 1 local Luan = require "luan:Luan.luan" |
2 local error = Luan.error | 2 local error = Luan.error |
3 local ipairs = Luan.ipairs or error() | 3 local ipairs = Luan.ipairs or error() |
4 local range = Luan.range or error() | |
4 local to_string = Luan.to_string or error() | 5 local to_string = Luan.to_string or error() |
5 local get_local_only = Luan.get_local_only or error() | 6 local get_local_only = Luan.get_local_only or error() |
6 local set_local_only = Luan.set_local_only or error() | 7 local set_local_only = Luan.set_local_only or error() |
8 local String = require "luan:String.luan" | |
9 local sub_string = String.sub or error() | |
10 local Math = require "luan:Math.luan" | |
11 local random = Math.random or error() | |
12 local Table = require "luan:Table.luan" | |
13 local concat = Table.concat or error() | |
7 local Lucene = require "luan:lucene/Lucene.luan" | 14 local Lucene = require "luan:lucene/Lucene.luan" |
8 local lucene_quote = Lucene.quote or error() | 15 local lucene_quote = Lucene.quote or error() |
9 local Http = require "luan:http/Http.luan" | 16 local Http = require "luan:http/Http.luan" |
10 local Db = require "site:/lib/Db.luan" | 17 local Db = require "site:/lib/Db.luan" |
18 local run_in_transaction = Db.run_in_transaction or error() | |
11 local Logging = require "luan:logging/Logging.luan" | 19 local Logging = require "luan:logging/Logging.luan" |
12 local logger = Logging.logger "User" | 20 local logger = Logging.logger "User" |
13 | 21 |
14 | 22 |
15 local User = {} | 23 local User = {} |
59 local doc = Db.get_document("id:"..id) | 67 local doc = Db.get_document("id:"..id) |
60 return doc and doc.type=="user" and from_doc(doc) or nil | 68 return doc and doc.type=="user" and from_doc(doc) or nil |
61 end | 69 end |
62 User.get_by_id = get_by_id | 70 User.get_by_id = get_by_id |
63 | 71 |
64 function User.get_by_email(email) | 72 local password_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" |
65 local doc = Db.get_document("user_email:"..lucene_quote(email)) | 73 do |
66 return doc and from_doc(doc) | 74 local t = {} |
75 for i in range(1,#password_chars) do | |
76 t[#t+1] = sub_string(password_chars,i,i) | |
77 end | |
78 password_chars = t | |
79 end | |
80 | |
81 local function new_password() | |
82 local n = #password_chars | |
83 local t = {} | |
84 for _ in range(1,10) do | |
85 t[#t+1] = password_chars[random(n)] | |
86 end | |
87 return concat(t) | |
88 end | |
89 | |
90 function User.get_or_create_by_email(email) | |
91 return run_in_transaction( function() | |
92 local doc = Db.get_document("user_email:"..lucene_quote(email)) | |
93 if doc ~= nil then | |
94 return from_doc(doc) | |
95 else | |
96 local user = User.new{ | |
97 email = email | |
98 password = new_password() | |
99 } | |
100 user.save() | |
101 return user | |
102 end | |
103 end ) | |
67 end | 104 end |
68 | 105 |
69 function User.search(query,sort,rows) | 106 function User.search(query,sort,rows) |
70 rows = rows or 1000000 | 107 rows = rows or 1000000 |
71 local users = {} | 108 local users = {} |
74 users[#users+1] = from_doc(doc) | 111 users[#users+1] = from_doc(doc) |
75 end | 112 end |
76 return users | 113 return users |
77 end | 114 end |
78 | 115 |
79 function User.current() | 116 local function current() |
80 local user = get_local_only(User,"current") | 117 local user = get_local_only(User,"current") |
81 if user == nil then | 118 if user == nil then |
82 local id = Http.request.cookies.user | 119 local id = Http.request.cookies.user |
83 local password = Http.request.cookies.password | 120 local password = Http.request.cookies.password |
84 if id == nil or password == nil then | 121 if id == nil or password == nil then |
85 user = "nil" | 122 user = "nil" |
86 else | 123 else |
87 user = get_by_id(id) | 124 user = get_by_id(id) |
88 if user == nil or user.registered == nil or user.password ~= password then | 125 if user == nil or user.password ~= password then |
89 user = "nil" | 126 user = "nil" |
90 end | 127 end |
91 end | 128 end |
92 set_local_only(User,"current",user) | 129 set_local_only(User,"current",user) |
93 end | 130 end |
94 return user ~= "nil" and user or nil | 131 return user ~= "nil" and user or nil |
95 end | 132 end |
133 User.current = current | |
96 | 134 |
97 function User.current_required() | 135 function User.current_required() |
98 local user = User.current() | 136 local user = current() |
99 user or Http.response.send_redirect "/login.html" | 137 user or Http.response.send_redirect "/login.html" |
100 return user | 138 return user |
101 end | 139 end |
102 | 140 |
103 return User | 141 return User |