161 lines
5.0 KiB
C#
161 lines
5.0 KiB
C#
using System.Data;
|
||
using System.IdentityModel.Tokens.Jwt;
|
||
using System.Security.Claims;
|
||
using System.Security.Cryptography;
|
||
using System.Text;
|
||
using IotManager.Common;
|
||
using Microsoft.AspNetCore.Http;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using Microsoft.IdentityModel.Tokens;
|
||
using NLog;
|
||
using NPOI.HSSF.UserModel;
|
||
using NPOI.SS.UserModel;
|
||
using NPOI.XSSF.UserModel;
|
||
using IotManager.private_key;
|
||
using ViewModels;
|
||
using ViewModels.Data;
|
||
using CommonEntity;
|
||
using MySQLAccess.PGModels;
|
||
|
||
namespace IotManager.Controllers
|
||
{
|
||
[Route("api/[controller]/[action]")]
|
||
[ApiController]
|
||
public class ValuesController : ControllerBase
|
||
{
|
||
|
||
private readonly Logger _logger = LogManager.GetCurrentClassLogger();
|
||
public IConfiguration? configuration { get; set; }
|
||
public ValuesController(IConfiguration _configuration)
|
||
{
|
||
configuration = _configuration;
|
||
}
|
||
public string GetId(string device_name,string uuid)
|
||
{
|
||
string data = string.Format("boolive_{0}_{1}", device_name, uuid);
|
||
// 密钥,用于生成MAC
|
||
string key = "secretKey#&!";
|
||
// 计算MAC
|
||
byte[] mac = Base64.ComputeHMACSHA256Short(data, key);
|
||
string str = Convert.ToBase64String(mac);
|
||
return str;
|
||
}
|
||
|
||
[HttpGet()]
|
||
public ReturnInfo GetAllInfo([FromBody] QueryData data)
|
||
{
|
||
|
||
ReturnInfo r = new ReturnInfo();
|
||
try
|
||
{
|
||
using var context = new PostgresContext();
|
||
var q = from dev in context.Deviceinfos
|
||
join emqx in context.EmqxLogininfos
|
||
on dev.Uuid equals emqx.DeviceUuid
|
||
into devinfo
|
||
from info in devinfo.DefaultIfEmpty()
|
||
select new { dev.ClientId, dev.ProductId, dev.DeviceName, dev.SecretKey, info.UserName, info.PassWord };
|
||
|
||
var p = q.ToList();
|
||
r.isok = true;
|
||
r.response = p;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
r.isok = false;
|
||
r.message = ex.Message;
|
||
}
|
||
return r;
|
||
|
||
}
|
||
|
||
[HttpPost()]
|
||
public ReturnInfo AddOrUpdateDeviceInfo([FromBody] BooliveDevice LLL)
|
||
{
|
||
ReturnInfo returnInfo = new ReturnInfo();
|
||
|
||
try
|
||
{
|
||
using var D = new PostgresContext();
|
||
if (LLL.Id != 0)
|
||
{
|
||
var Q = D.Deviceinfos.SingleOrDefault(A => A.ClientId == LLL.Id);
|
||
Q.DeviceName = LLL.DeviceName;
|
||
Q.SecretKey = LLL.DeviceSecret;
|
||
var DT = DateTime.Now;
|
||
Q.UpdateTime = DT;
|
||
Q.UpdateTimeUnix = Tools.ToUnixTimestampBySeconds(DT);
|
||
}
|
||
else
|
||
{
|
||
D.Database.BeginTransaction();
|
||
var DT = DateTime.Now;
|
||
var LT = Tools.ToUnixTimestampBySeconds(DT);
|
||
var LLL1 = new Deviceinfo();
|
||
|
||
var uuid = System.Guid.NewGuid().ToString("N");
|
||
LLL1.Uuid = uuid;
|
||
LLL1.CreateTime = DT;
|
||
LLL1.UpdateTime = DT;
|
||
|
||
LLL1.CreateTimeUnix = LT;
|
||
LLL1.UpdateTimeUnix = LT;
|
||
|
||
D.Deviceinfos.Add(LLL1);
|
||
|
||
EmqxLogininfo l = new EmqxLogininfo();
|
||
l.DeviceUuid = uuid;
|
||
l.UserName = LLL.DeviceName;
|
||
l.PassWord = GetId(l.UserName,uuid);
|
||
l.UpdateTime = DT;
|
||
l.UpdateTimeUnix = LT;
|
||
l.CreateTime = DT;
|
||
l.CreateTimeUnix = LT;
|
||
|
||
D.EmqxLogininfos.Add(l);
|
||
|
||
|
||
D.SaveChanges();
|
||
D.Database.CommitTransaction();
|
||
}
|
||
returnInfo.isok = true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
returnInfo.isok = false;
|
||
returnInfo.message = ex.Message;
|
||
}
|
||
return returnInfo;
|
||
}
|
||
|
||
|
||
[HttpDelete()]
|
||
public ReturnInfo DeleteDeviceInfo([FromBody] BooliveDevice LLL)
|
||
{
|
||
ReturnInfo r = new ReturnInfo();
|
||
try
|
||
{
|
||
using var Q = new PostgresContext();
|
||
|
||
Q.Database.BeginTransaction();
|
||
var a = Q.Deviceinfos.SingleOrDefault(A => A.ClientId == LLL.Id);
|
||
Q.Deviceinfos.Remove(a);
|
||
|
||
var b = Q.EmqxLogininfos.SingleOrDefault(A => A.DeviceUuid.Equals(a.Uuid));
|
||
Q.EmqxLogininfos.Remove(b);
|
||
|
||
Q.SaveChanges();
|
||
|
||
Q.Database.CommitTransaction();
|
||
r.isok = true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
r.isok = false;
|
||
r.message = ex.Message;
|
||
}
|
||
return r;
|
||
}
|
||
}
|
||
}
|