171 lines
6.4 KiB
JavaScript
171 lines
6.4 KiB
JavaScript
const {
|
|
getDeviceInformation,
|
|
setHostname,
|
|
setProtocols,
|
|
setGateway,
|
|
setDNS,
|
|
setNTP,
|
|
rebootCamera,
|
|
setDateAndTime,
|
|
createUser,
|
|
deleteUser,
|
|
setVideoConfiguration,
|
|
setNetworkInterface,
|
|
setImagingSettings,
|
|
setDiscoveryMode,
|
|
getUIFieldValues,
|
|
} = require('./onvifDeviceManager/utils.js')
|
|
|
|
module.exports = function(s,config,lang,app,io){
|
|
async function getOnvifDevice(groupKey,monitorId){
|
|
const onvifDevice = s.group[groupKey].activeMonitors[monitorId].onvifConnection || (await s.createOnvifDevice({id: monitorId, ke: groupKey})).device
|
|
return onvifDevice
|
|
}
|
|
/**
|
|
* API : Get ONVIF Data from Camera
|
|
*/
|
|
app.get(config.webPaths.apiPrefix+':auth/onvifDeviceManager/:ke/:id',function (req,res){
|
|
s.auth(req.params,async (user) => {
|
|
const groupKey = req.params.ke
|
|
const monitorId = req.params.id
|
|
const {
|
|
monitorPermissions,
|
|
monitorRestrictions,
|
|
} = s.getMonitorsPermitted(user.details,monitorId)
|
|
const {
|
|
isRestricted,
|
|
isRestrictedApiKey,
|
|
apiKeyPermissions,
|
|
} = s.checkPermission(user)
|
|
if(
|
|
isRestrictedApiKey && apiKeyPermissions.get_monitors_disallowed ||
|
|
isRestricted && !monitorPermissions[`${monitorId}_monitors`]
|
|
){
|
|
s.closeJsonResponse(res,{ok: false, msg: lang['Not Authorized']});
|
|
return
|
|
}
|
|
const endData = {ok: true}
|
|
try{
|
|
const onvifDevice = await getOnvifDevice(groupKey,monitorId)
|
|
const cameraInfo = await getUIFieldValues(onvifDevice)
|
|
endData.onvifData = cameraInfo
|
|
}catch(err){
|
|
endData.ok = false
|
|
endData.err = err
|
|
s.debugLog(err)
|
|
}
|
|
s.closeJsonResponse(res,endData)
|
|
},res,req);
|
|
})
|
|
/**
|
|
* API : Save ONVIF Data to Camera
|
|
*/
|
|
app.post(config.webPaths.apiPrefix+':auth/onvifDeviceManager/:ke/:id/save',function (req,res){
|
|
s.auth(req.params,async (user) => {
|
|
const groupKey = req.params.ke
|
|
const monitorId = req.params.id
|
|
const {
|
|
monitorPermissions,
|
|
monitorRestrictions,
|
|
} = s.getMonitorsPermitted(user.details,monitorId);
|
|
const {
|
|
isRestricted,
|
|
isRestrictedApiKey,
|
|
apiKeyPermissions,
|
|
} = s.checkPermission(user);
|
|
if(
|
|
isRestrictedApiKey && apiKeyPermissions.control_monitors_disallowed
|
|
){
|
|
s.closeJsonResponse(res,{
|
|
ok: false,
|
|
msg: lang['Not Authorized']
|
|
});
|
|
return
|
|
}
|
|
const endData = {ok: true}
|
|
const responses = {}
|
|
try{
|
|
const onvifDevice = await getOnvifDevice(groupKey,monitorId)
|
|
const form = s.getPostData(req)
|
|
const videoToken = form.VideoConfiguration && form.VideoConfiguration.videoToken ? form.VideoConfiguration.videoToken : null
|
|
if(form.DateandTime){
|
|
const dateAndTime = form.DateandTime
|
|
if(dateAndTime.setNTP){
|
|
responses.setNTP = await setNTP(onvifDevice,dateAndTime.setNTP)
|
|
}
|
|
responses.setDateAndTime = await setDateAndTime(onvifDevice,dateAndTime)
|
|
}
|
|
if(form.Imaging){
|
|
responses.setImagingSettings = await setImagingSettings(onvifDevice,Object.assign({videoToken: videoToken},form.Imaging))
|
|
}
|
|
if(form.Network){
|
|
const network = form.Network
|
|
if(network.setHostname){
|
|
responses.setHostname = await setHostname(onvifDevice,network.setHostname)
|
|
}
|
|
if(network.setProtocols){
|
|
responses.setProtocols = await setProtocols(onvifDevice,network.setProtocols)
|
|
}
|
|
if(network.setGateway){
|
|
responses.setGateway = await setGateway(onvifDevice,network.setGateway)
|
|
}
|
|
if(network.setDNS){
|
|
responses.setDNS = await setDNS(onvifDevice,network.setDNS)
|
|
}
|
|
if(network.setNetworkInterface){
|
|
responses.setNetworkInterface = await setNetworkInterface(onvifDevice,network.setNetworkInterface)
|
|
}
|
|
}
|
|
if(form.VideoConfiguration){
|
|
responses.VideoConfiguration = await setVideoConfiguration(onvifDevice,form.VideoConfiguration)
|
|
}
|
|
}catch(err){
|
|
endData.ok = false
|
|
endData.err = err
|
|
s.debugLog(err)
|
|
s.debugLog(responses)
|
|
}
|
|
endData.responses = responses
|
|
s.closeJsonResponse(res,endData)
|
|
},res,req);
|
|
})
|
|
/**
|
|
* API : Reboot Camera
|
|
*/
|
|
app.get(config.webPaths.apiPrefix+':auth/onvifDeviceManager/:ke/:id/reboot',function (req,res){
|
|
s.auth(req.params,async (user) => {
|
|
const groupKey = req.params.ke
|
|
const monitorId = req.params.id
|
|
const {
|
|
monitorPermissions,
|
|
monitorRestrictions,
|
|
} = s.getMonitorsPermitted(user.details,monitorId);
|
|
const {
|
|
isRestricted,
|
|
isRestrictedApiKey,
|
|
apiKeyPermissions,
|
|
} = s.checkPermission(user);
|
|
if(
|
|
isRestrictedApiKey && apiKeyPermissions.control_monitors_disallowed
|
|
){
|
|
s.closeJsonResponse(res,{
|
|
ok: false,
|
|
msg: lang['Not Authorized']
|
|
});
|
|
return
|
|
}
|
|
const endData = {ok: true}
|
|
try{
|
|
const onvifDevice = await getOnvifDevice(groupKey,monitorId)
|
|
const cameraInfo = await rebootCamera(onvifDevice)
|
|
endData.onvifData = cameraInfo
|
|
}catch(err){
|
|
endData.ok = false
|
|
endData.err = err
|
|
s.debugLog(err)
|
|
}
|
|
s.closeJsonResponse(res,endData)
|
|
},res,req);
|
|
})
|
|
}
|