| 
					
				 | 
			
			
				@@ -37,6 +37,12 @@ class User(Model): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         except peewee.IntegrityError: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             raise e.UserExists(name=user.name) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def change_password(self, req: r.PasswordChange): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if not pwd.verify(req.old, self.passhash): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            raise e.BadPassword(name=self.name) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.passhash = pwd.hash(req.n1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self.save() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @staticmethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def from_invite(user: r.User, token: str) -> "User": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         invite = UserInvite.by_code(token) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -72,6 +78,9 @@ class User(Model): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def base_url(self) -> str: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return f"/u/{self.name}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def config_url(self) -> str: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return f"/u/{self.name}/config" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def get_links( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self, as_user: Optional["User"], page: int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ) -> Tuple[List[v.Link], v.Pagination]: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -97,7 +106,7 @@ class User(Model): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def to_dict(self) -> dict: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return {"id": self.id, "name": self.name} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def get_config(self) -> v.Config: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def get_config(self, status_msg: Optional[int]) -> v.Config: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         admin_pane = None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if self.is_admin: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             user_invites = [ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -109,7 +118,7 @@ class User(Model): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for ui in UserInvite.select().where(UserInvite.created_by == self) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             admin_pane = v.AdminPane(invites=user_invites) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return v.Config(username=self.name, admin_pane=admin_pane,) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return v.Config(username=self.name, admin_pane=admin_pane, msg=status_msg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def import_pinboard_data(self, stream): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try: 
			 |