123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- using IES.ExamServer.Models;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Extensions.Caching.Memory;
- using System.Diagnostics;
- using System.Text.Json.Nodes;
- using System.Text.Json;
- using IES.ExamServer.Helper;
- using System.DrawingCore.Imaging;
- using System.DrawingCore;
- using System.IdentityModel.Tokens.Jwt;
- namespace IES.ExamServer.Controllers
- {
- [ApiController]
- [Route("init")]
-
- public class InitController : ControllerBase
- {
- private readonly IConfiguration _configuration;
- private readonly IHttpClientFactory _httpClientFactory;
- private readonly IMemoryCache _memoryCache;
- private readonly ILogger<InitController> _logger;
- public InitController(ILogger<InitController> logger, IConfiguration configuration, IHttpClientFactory httpClientFactory, IMemoryCache memoryCache)
- {
- _logger = logger;
- _configuration=configuration;
- _httpClientFactory=httpClientFactory;
- _memoryCache=memoryCache;
- }
- [HttpPost("device")]
- public async Task<IActionResult> Device()
- {
- int code = 0;
- string msg = string.Empty;
- try
- {
- _memoryCache.TryGetValue(Constant._KeyServerCenter, out JsonNode? data);
- if (data!=null)
- {
- return Ok(new { code = 200, msg = "云端服务连接成功!", data = data });
- }
- else
- {
- code=500;
- msg="云端服务未连接!";
- }
- }
- catch (Exception ex)
- {
- code=500;
- msg="云端服务未连接!";
- }
- return Ok(new { code, msg });
- }
- /**
- {
- "type":"sms",//qrcode二维码扫码登录:randomCode必传; sms 短信验证登录:randomCode必传,mobile必传
- "randomCode",
- "mobile":"1528377****"
- }
- **/
- /// <summary>
- /// 登录验证
- /// </summary>
- /// <param name="randomCode"></param>
- /// <returns></returns>
- [HttpPost("login-check")]
- public async Task<IActionResult> LoginCheck(JsonNode json)
- {
- int code = 0;
- string msg = string.Empty;
- try
- {
- var type = json["type"];
- string? CenterUrl = _configuration.GetValue<string>("ExamServer:CenterUrl");
- if (!string.IsNullOrWhiteSpace($"{type}"))
- {
- TmdidImplicit? token = null;
- string x_auth_token = string.Empty;
- List<School>? schools = null;
- JsonNode? jsonNode = null;
- switch (true)
- {
- case bool when $"{type}".Equals("qrcode"):
- {
- string randomCode = $"{json["randomCode"]}";
- System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
- var response = await _httpClientFactory.CreateClient().GetAsync($"{CenterUrl}/hita/check-login?code={randomCode}");
- if (response.IsSuccessStatusCode)
- {
- string content = await response.Content.ReadAsStringAsync();
- if (!string.IsNullOrWhiteSpace(content))
- {
- jsonNode = JsonSerializer.Deserialize<JsonNode>(content);
- }
- else
- {
- code=400;
- msg="随机码验证失败";
- }
- }
- else
- {
- code=400;
- msg="随机码验证错误";
- }
- break;
- }
- case bool when $"{type}".Equals("smspin"):
- {
- string pin_code = $"{json["pin_code"]}";
- string account = $"{json["account"]}";
- var response = await _httpClientFactory.CreateClient().PostAsJsonAsync($"{CenterUrl}/core/sendsms/check", new { pin_code, account });
- if (response.IsSuccessStatusCode)
- {
- string content = await response.Content.ReadAsStringAsync();
- if (!string.IsNullOrWhiteSpace(content))
- {
- jsonNode = JsonSerializer.Deserialize<JsonNode>(content);
- }
- else
- {
- code=400;
- msg="短信验证返回结果为空";
- }
- }
- else
- {
- code=400;
- msg="短信验证错误";
- }
- break;
- }
- }
- if (jsonNode != null && $"{jsonNode["code"]}".Equals("200"))
- {
- token = JsonSerializer.Deserialize<TmdidImplicit>(jsonNode["implicit_token"]);
- x_auth_token = $"{jsonNode["x_auth_token"]}";
- schools = JsonSerializer.Deserialize<List<School>>(jsonNode["schools"]);
- var jwt = new JwtSecurityToken(token?.id_token);
- var id = jwt.Payload.Sub;
- jwt.Payload.TryGetValue("name", out object? name);
- jwt.Payload.TryGetValue("picture", out object? picture);
- _memoryCache.Set($"Teacher:{id}", new LoginTeacher { id=id, name=$"{name}", implicit_token= token, picture=$"{picture}", schools=schools, x_auth_token=x_auth_token });
- return Ok(new { implicit_token = token, x_auth_token = x_auth_token, schools = schools });
- }
- else
- {
- code=400;
- msg="验证失败";
- }
- }
- else
- {
- code=400;
- msg="参数错误";
- }
- }
- catch (Exception ex)
- {
- code=500;
- msg="异常错误";
- }
- return Ok(new { code = code });
- }
- /// <summary>
- /// 登录模式初始化
- /// </summary>
- /// <returns></returns>
- [HttpGet("/login-init")]
- public async Task<IActionResult> LoginInit(JsonNode json)
- {
- var type = json["type"];
- string qrcode = string.Empty;
- string randomCode = "";
- switch (true)
- {
- case bool when $"{type}".Equals("qrcode"):
- {
- // 生成二维码图片
- Random random = new Random();
- randomCode = $"{random.Next(1000, 9999)}";
- string? CenterUrl = _configuration.GetValue<string>("ExamServer:CenterUrl");
- string content = $"{CenterUrl}/joinSchool?schoolCode=login:{randomCode}&m=%E7%99%BB%E5%BD%95&o=1";
- Bitmap qrCodeImage = QRCodeHelper.GetBitmap(content, 200, 200);
- using (MemoryStream stream = new MemoryStream())
- {
- qrCodeImage.Save(stream, ImageFormat.Png);
- byte[] data = stream.ToArray();
- qrcode=$"data:image/png;base64,{Convert.ToBase64String(data)}";
- }
- return Ok(new { code = 200, randomCode = randomCode, qrcode, type });
- }
- case bool when $"{type}".Equals("smspin"):
- {
- int send = 0;
- if (!string.IsNullOrWhiteSpace($"{json["area"]}") && !string.IsNullOrWhiteSpace($"{json["to"]}"))
- {
- string? CenterUrl = _configuration.GetValue<string>("ExamServer:CenterUrl");
- string url = $"{CenterUrl}/core/sendsms/pin";
- HttpResponseMessage message = await _httpClientFactory.CreateClient().PostAsJsonAsync(url, new { });
- if (message.IsSuccessStatusCode)
- {
- string content = await message.Content.ReadAsStringAsync();
- JsonNode? jsonNode = JsonSerializer.Deserialize<JsonNode>(content);
- if (jsonNode!=null && int.TryParse($"{jsonNode["send"]}", out int s))
- {
- send = s;
- }
- }
- }
- return Ok(new { code = 200, send, type });
- }
- }
- return Ok(new { code = 400 });
- }
- }
- }
|