@@ -12,6 +12,7 @@ import {
1212 HTTP_404_NOT_FOUND ,
1313} from '../status' ;
1414import { asyncErrorHandler , checkUnexpectedKeys } from '../utils' ;
15+ import { HomeAssistantService } from '../services/HomeAssistantService' ;
1516
1617export const me = asyncErrorHandler ( async ( request : Request , response : Response ) => {
1718 assert ( request . user !== undefined ) ;
@@ -21,6 +22,7 @@ export const me = asyncErrorHandler(async (request: Request, response: Response)
2122 userName : request . homeAssistantUserName ,
2223 userDisplayName : request . homeAssistantUserDisplayName ,
2324 role : request . user . role ,
25+ mobileAppDevice : request . user . mobileAppDevice ,
2426 } ) ;
2527} ) ;
2628
@@ -35,15 +37,25 @@ export const me = asyncErrorHandler(async (request: Request, response: Response)
3537 * properties:
3638 * role:
3739 * $ref: '#/components/schemas/UserRole'
40+ * mobileAppDevice:
41+ * type: string
42+ * nullable: true
43+ * description: The devices where notifications will be send.
44+ * example: Redmi Note 8T
3845 */
3946type CreateUserBody = {
4047 role : unknown ,
48+ mobileAppDevice : unknown ,
4149} ;
4250
4351export const createUser = asyncErrorHandler ( async ( request : Request , response : Response ) => {
44- if ( ! checkUnexpectedKeys < CreateUserBody > ( request . body , [ 'role' ] , response ) ) return ;
52+ if ( ! checkUnexpectedKeys < CreateUserBody > (
53+ request . body ,
54+ [ 'role' , 'mobileAppDevice' ] ,
55+ response ,
56+ ) ) return ;
4557
46- const { role } = request . body as CreateUserBody ;
58+ const { role, mobileAppDevice } = request . body as CreateUserBody ;
4759
4860 if ( role === undefined ) {
4961 response
@@ -59,6 +71,19 @@ export const createUser = asyncErrorHandler(async (request: Request, response: R
5971 return ;
6072 }
6173
74+ if ( ( mobileAppDevice !== undefined &&
75+ mobileAppDevice !== null &&
76+ typeof mobileAppDevice !== 'string' ) ||
77+ ( typeof mobileAppDevice === 'string' &&
78+ ( await HomeAssistantService . getMobileAppDevices ( ) ) . find (
79+ device => device . name === mobileAppDevice ,
80+ ) === undefined ) ) {
81+ response
82+ . status ( HTTP_400_BAD_REQUEST )
83+ . json ( { message : 'Invalid mobileAppDevice.' } ) ;
84+ return ;
85+ }
86+
6287 const user = await User . findOne ( {
6388 where : {
6489 homeAssistantUserId : request . homeAssistantUserId ,
@@ -75,6 +100,7 @@ export const createUser = asyncErrorHandler(async (request: Request, response: R
75100 const newUser = await User . create ( {
76101 homeAssistantUserId : request . homeAssistantUserId ,
77102 role,
103+ mobileAppDevice,
78104 } ) ;
79105
80106 response
@@ -85,6 +111,7 @@ export const createUser = asyncErrorHandler(async (request: Request, response: R
85111 userName : request . homeAssistantUserName ,
86112 userDisplayName : request . homeAssistantUserDisplayName ,
87113 role : newUser . role ,
114+ mobileAppDevice : newUser . mobileAppDevice ,
88115 } ) ;
89116} ) ;
90117
0 commit comments