New padding.
This commit is contained in:
		
							parent
							
								
									9e94210bc3
								
							
						
					
					
						commit
						84e5bac1b9
					
				| @ -12,11 +12,17 @@ class UserModel(BaseModel): | |||||||
|     ) |     ) | ||||||
|     nick = ModelField( |     nick = ModelField( | ||||||
|         name="nick", |         name="nick", | ||||||
|         required=False, |         required=True, | ||||||
|         min_length=2, |         min_length=2, | ||||||
|         max_length=20, |         max_length=20, | ||||||
|         regex=r"^[a-zA-Z0-9_]+$", |         regex=r"^[a-zA-Z0-9_]+$", | ||||||
|     ) |     ) | ||||||
|  |     color = ModelField( | ||||||
|  |         name ="color", | ||||||
|  |         required=True, | ||||||
|  |         regex=r"^#[0-9a-fA-F]{6}$", | ||||||
|  |         kind=str | ||||||
|  |     ) | ||||||
|     email = ModelField( |     email = ModelField( | ||||||
|         name="email", |         name="email", | ||||||
|         required=False, |         required=False, | ||||||
|  | |||||||
| @ -7,6 +7,7 @@ from snek.service.chat import ChatService | |||||||
| from snek.service.notification import NotificationService | from snek.service.notification import NotificationService | ||||||
| from snek.service.socket import SocketService | from snek.service.socket import SocketService | ||||||
| from snek.service.user import UserService | from snek.service.user import UserService | ||||||
|  | from snek.service.util import UtilService | ||||||
| from snek.system.object import Object | from snek.system.object import Object | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -21,6 +22,7 @@ def get_services(app): | |||||||
|             "chat": ChatService(app=app), |             "chat": ChatService(app=app), | ||||||
|             "socket": SocketService(app=app), |             "socket": SocketService(app=app), | ||||||
|             "notification": NotificationService(app=app), |             "notification": NotificationService(app=app), | ||||||
|  |             "util": UtilService(app=app), | ||||||
|         } |         } | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -19,6 +19,7 @@ class ChatService(BaseService): | |||||||
|         sent_to_count = await self.services.socket.broadcast(channel_uid, dict( |         sent_to_count = await self.services.socket.broadcast(channel_uid, dict( | ||||||
|             message=message, |             message=message, | ||||||
|             user_uid=user_uid, |             user_uid=user_uid, | ||||||
|  |             color=user['color'], | ||||||
|             channel_uid=channel_uid, |             channel_uid=channel_uid, | ||||||
|             created_at=channel_message["created_at"],  |             created_at=channel_message["created_at"],  | ||||||
|             updated_at=None, |             updated_at=None, | ||||||
|  | |||||||
| @ -13,11 +13,17 @@ class UserService(BaseService): | |||||||
|             return False |             return False | ||||||
|         return True |         return True | ||||||
| 
 | 
 | ||||||
|  |     async def save(self, user): | ||||||
|  |         if not user['color']: | ||||||
|  |             user['color'] = await self.services.util.random_light_hex_color() | ||||||
|  |         return await super().save(user) | ||||||
|  | 
 | ||||||
|     async def register(self, email, username, password): |     async def register(self, email, username, password): | ||||||
|         if await self.exists(username=username): |         if await self.exists(username=username): | ||||||
|             raise Exception("User already exists.") |             raise Exception("User already exists.") | ||||||
|         model = await self.new() |         model = await self.new() | ||||||
|         model["nick"] = username |         model["nick"] = username | ||||||
|  |         model['color'] = await self.services.util.random_light_hex_color() | ||||||
|         model.email.value = email |         model.email.value = email | ||||||
|         model.username.value = username |         model.username.value = username | ||||||
|         model.password.value = await security.hash(password) |         model.password.value = await security.hash(password) | ||||||
|  | |||||||
| @ -20,6 +20,7 @@ class MessageListElement extends HTMLElement { | |||||||
|     createElement(message){ |     createElement(message){ | ||||||
|         const element = document.createElement("div") |         const element = document.createElement("div") | ||||||
|         element.dataset.uid = message.uid |         element.dataset.uid = message.uid | ||||||
|  |         element.dataset.color = message.color | ||||||
|         element.dataset.channel_uid = message.channel_uid |         element.dataset.channel_uid = message.channel_uid | ||||||
|         element.dataset.user_nick = message.user_nick |         element.dataset.user_nick = message.user_nick | ||||||
|         element.dataset.created_at = message.created_at |         element.dataset.created_at = message.created_at | ||||||
| @ -28,11 +29,13 @@ class MessageListElement extends HTMLElement { | |||||||
|         element.classList.add("message") |         element.classList.add("message") | ||||||
|         const avatar = document.createElement("div") |         const avatar = document.createElement("div") | ||||||
|         avatar.classList.add("avatar") |         avatar.classList.add("avatar") | ||||||
|  |         avatar.style.backgroundColor = message.color | ||||||
|         avatar.innerText = message.user_nick[0] |         avatar.innerText = message.user_nick[0] | ||||||
|         const messageContent = document.createElement("div") |         const messageContent = document.createElement("div") | ||||||
|         messageContent.classList.add("message-content") |         messageContent.classList.add("message-content") | ||||||
|         const author = document.createElement("div") |         const author = document.createElement("div") | ||||||
|         author.classList.add("author") |         author.classList.add("author") | ||||||
|  |         author.style.color = message.color | ||||||
|         author.textContent = message.user_nick |         author.textContent = message.user_nick | ||||||
|         const text = document.createElement("div") |         const text = document.createElement("div") | ||||||
|         text.classList.add("text") |         text.classList.add("text") | ||||||
| @ -60,6 +63,7 @@ class MessageListElement extends HTMLElement { | |||||||
|             message.channel_uid, |             message.channel_uid, | ||||||
|             message.user_uid, |             message.user_uid, | ||||||
|             message.user_nick, |             message.user_nick, | ||||||
|  |             message.color, | ||||||
|             message.message, |             message.message, | ||||||
|             message.created_at, |             message.created_at, | ||||||
|             message.updated_at |             message.updated_at | ||||||
|  | |||||||
| @ -5,11 +5,13 @@ class MessageModel { | |||||||
|     created_at = null  |     created_at = null  | ||||||
|     updated_at = null   |     updated_at = null   | ||||||
|     element = null  |     element = null  | ||||||
|     constructor(uid, channel_uid,user_uid,user_nick, message,created_at, updated_at){ |     color = null | ||||||
|  |     constructor(uid, channel_uid,user_uid,user_nick, color,message,created_at, updated_at){ | ||||||
|         this.uid = uid  |         this.uid = uid  | ||||||
|         this.message = message  |         this.message = message  | ||||||
|         this.user_uid = user_uid  |         this.user_uid = user_uid  | ||||||
|         this.user_nick = user_nick |         this.user_nick = user_nick | ||||||
|  |         this.color = color | ||||||
|         this.channel_uid = channel_uid   |         this.channel_uid = channel_uid   | ||||||
|         this.created_at = created_at |         this.created_at = created_at | ||||||
|         this.updated_at = updated_at |         this.updated_at = updated_at | ||||||
|  | |||||||
| @ -48,6 +48,7 @@ class BaseMapper: | |||||||
|     async def save(self, model: BaseModel) -> bool: |     async def save(self, model: BaseModel) -> bool: | ||||||
|         if not model.record.get("uid"): |         if not model.record.get("uid"): | ||||||
|             raise Exception(f"Attempt to save without uid: {model.record}.") |             raise Exception(f"Attempt to save without uid: {model.record}.") | ||||||
|  |         model.updated_at.update() | ||||||
|         return self.table.upsert(model.record, ["uid"]) |         return self.table.upsert(model.record, ["uid"]) | ||||||
| 
 | 
 | ||||||
|     async def find(self, **kwargs) -> typing.AsyncGenerator: |     async def find(self, **kwargs) -> typing.AsyncGenerator: | ||||||
|  | |||||||
| @ -16,9 +16,12 @@ class LoginView(BaseFormView): | |||||||
| 
 | 
 | ||||||
|     async def submit(self, form): |     async def submit(self, form): | ||||||
|         if await form.is_valid: |         if await form.is_valid: | ||||||
|             user = await self.services.user.get(username=form.username.value,deleted_at=None) |             user = await self.services.user.get(username=form['username'],deleted_at=None) | ||||||
|  |             # Migrate data | ||||||
|  |             await self.services.user.save(user) | ||||||
|             self.session["logged_in"] = True |             self.session["logged_in"] = True | ||||||
|             self.session["username"] = form.username.value |             self.session["username"] = user['username'] | ||||||
|             self.session["uid"] = user["uid"] |             self.session["uid"] = user["uid"] | ||||||
|  |             self.session["color"] = user["color"] | ||||||
|             return {"redirect_url": "/web.html"} |             return {"redirect_url": "/web.html"} | ||||||
|         return {"is_valid": False} |         return {"is_valid": False} | ||||||
|  | |||||||
| @ -22,5 +22,5 @@ class RegisterView(BaseFormView): | |||||||
|         self.request.session["uid"] = result["uid"] |         self.request.session["uid"] = result["uid"] | ||||||
|         self.request.session["username"] = result["username"] |         self.request.session["username"] = result["username"] | ||||||
|         self.request.session["logged_in"] = True |         self.request.session["logged_in"] = True | ||||||
| 
 |         self.request.session["color"] = result["color"] | ||||||
|         return {"redirect_url": "/web.html"} |         return {"redirect_url": "/web.html"} | ||||||
|  | |||||||
| @ -14,13 +14,19 @@ class RPCView(BaseView): | |||||||
|             self.user_uid = self.view.session.get("uid") |             self.user_uid = self.view.session.get("uid") | ||||||
|             self.ws = ws  |             self.ws = ws  | ||||||
|              |              | ||||||
|         |         async def get_user(self, user_uid): | ||||||
|  |             if not user_uid: | ||||||
|  |                 user_uid = self.user_uid | ||||||
|  |             user = await self.services.user.get(uid=user_uid) | ||||||
|  |             record = user.record | ||||||
|  |             del record['password'] | ||||||
|  |             del record['deleted_at'] | ||||||
|  |             del record['email'] | ||||||
|  |             return record  | ||||||
|         async def get_messages(self, channel_uid,offset=0): |         async def get_messages(self, channel_uid,offset=0): | ||||||
|             messages = [] |             messages = [] | ||||||
|             async for message in self.services.channel_message.query("SELECT * FROM channel_message ORDER BY created_at DESC LIMIT 30"): #"SELECT uid, channel_uid, user_uid, message, created_at FROM channel_message WHERE channel_uid = :channel_uid ORDER BY created_at DESC LIMIT 30 OFFSET :offset",{"channel_uid":channel_uid,"offset":int(offset)}): |             async for message in self.services.channel_message.query("SELECT * FROM channel_message ORDER BY created_at DESC LIMIT 30"): #"SELECT uid, channel_uid, user_uid, message, created_at FROM channel_message WHERE channel_uid = :channel_uid ORDER BY created_at DESC LIMIT 30 OFFSET :offset",{"channel_uid":channel_uid,"offset":int(offset)}): | ||||||
|                  |                  | ||||||
|                 print("JEEEHHH\n",flush=True) |  | ||||||
| 
 |  | ||||||
|                 user = await self.services.user.get(uid=message["user_uid"]) |                 user = await self.services.user.get(uid=message["user_uid"]) | ||||||
|                 if not user: |                 if not user: | ||||||
|                     print("User not found!",flush= True) |                     print("User not found!",flush= True) | ||||||
| @ -28,6 +34,7 @@ class RPCView(BaseView): | |||||||
| 
 | 
 | ||||||
|                 messages.insert(0,dict( |                 messages.insert(0,dict( | ||||||
|                     uid=message["uid"], |                     uid=message["uid"], | ||||||
|  |                     color=user['color'], | ||||||
|                     user_uid=message["user_uid"], |                     user_uid=message["user_uid"], | ||||||
|                     channel_uid=message["channel_uid"], |                     channel_uid=message["channel_uid"], | ||||||
|                     user_nick=user['nick'], |                     user_nick=user['nick'], | ||||||
|  | |||||||
| @ -33,6 +33,7 @@ class StatusView(BaseView): | |||||||
|                 "email": user["email"], |                 "email": user["email"], | ||||||
|                 "nick": user["nick"], |                 "nick": user["nick"], | ||||||
|                 "uid": user["uid"], |                 "uid": user["uid"], | ||||||
|  |                 "color": user['color'], | ||||||
|                 "memberships": memberships, |                 "memberships": memberships, | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user