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 |
