using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using Winsoft.GOV.XF.WebApi.WXCore.Services; using Senparc.Weixin.Entities; using Microsoft.Extensions.Logging; using Winsoft.GOV.XF.WebApi.WXCore.Models; using Senparc.Weixin.MP.CoreMvcExtension; using Winsoft.GOV.XF.WebApi.WXCore.Filters; using Winsoft.GOV.XF.WebApi.WXCore.Helpers; using System.Net.Http.Headers; using System.IO; using Microsoft.AspNetCore.Http; using Newtonsoft.Json; using System.Text.RegularExpressions; // For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 namespace Winsoft.GOV.XF.WebApi.WXCore.Controllers { [Route("api/[controller]")] public class BundleController : BaseController { UsersService _usersService; BundlesService _bundlesService; AssetsService _assetsService; ImagesService _imagesService; XFApiService _xfApiService; public BundleController(IOptions senparcWeixinSetting, ILoggerFactory loggerFactory, UsersService usersService, BundlesService bundlesService, AssetsService assetsService, ImagesService imagesService, XFApiService xfApiService) : base(senparcWeixinSetting, loggerFactory) { _usersService = usersService; _bundlesService = bundlesService; _assetsService = assetsService; _imagesService = imagesService; _xfApiService = xfApiService; } // GET: api/values [HttpGet("{id}")] [Produces(typeof(Bundle))] [WeixinInternalRequest("访问被拒绝,请通过微信客户端访问!", "nofilter")] [WXOAuthCheck(appId: null, oauthCallbackUrl: "api/Auth")] public async Task Get(string id) { Bundle b = await _bundlesService.Get(id); if (b == null) return BadRequest(); return Ok(b); } [HttpGet("detail/{id}")] [Produces(typeof(Bundle))] [WeixinInternalRequest("访问被拒绝,请通过微信客户端访问!", "nofilter")] [WXOAuthCheck(appId: null, oauthCallbackUrl: "api/Auth")] public async Task GetDetail(string id) { Bundle b = await _bundlesService.GetDetail(id); if (b == null) return BadRequest(); return Ok(b); } [HttpGet("all")] [Produces(typeof(IEnumerable))] [WeixinInternalRequest("访问被拒绝,请通过微信客户端访问!", "nofilter")] [WXOAuthCheck(appId: null, oauthCallbackUrl: "api/Auth")] public async Task GetAll() { IEnumerable list ; WXUser u = await _usersService.GetUser(HttpContext.Session.GetString("OpenId")); if (u != null) { list = await _bundlesService.GetByUserId(u.Id); if (list != null) return Ok(list); } return Ok(new List()); } [HttpGet("generate/{id}/{ciphertext}")] [Produces(typeof(string))] public async Task GenerateShareURL(string id, string ciphertext) { Bundle b = await _bundlesService.Get(id); if (b == null) return BadRequest("非法请求"); string data = ciphertext.AESEncrypt(b.Key); BundleAccessToken a = JsonConvert.DeserializeObject(data); if (a == null) return BadRequest("非法请求"); string multimediaURL = _bundlesService.GenerateShareURL(b, a, HttpContext.Request.Cookies["BaseUrl"]); if (!String.IsNullOrEmpty(multimediaURL)) return Ok(multimediaURL); return BadRequest("无权限发布"); } [HttpGet("getShareInfo/{id}/{ciphertext}")] public async Task GetShareInfo(string id, string ciphertext) { Bundle b = await _bundlesService.GetDetail(id); if (b == null) return BadRequest("非法请求"); string data = ciphertext.AESDecrypt(b.Key); BundleAccessToken a = JsonConvert.DeserializeObject(data); if (a == null) return BadRequest("非法请求"); if (a.Expire != -1) { if (a.Expire < DateTime.Now.ToTimeStamp()) return BadRequest("已过期"); } return Ok(b); } // POST api/values [HttpPost] [Produces(typeof(string))] [WeixinInternalRequest("访问被拒绝,请通过微信客户端访问!", "nofilter")] [WXOAuthCheck(appId: null, oauthCallbackUrl: "api/Auth")] public async Task Post([FromBody] Bundle value) { foreach(Asset a in value.Assets) { if (a.AssetType == AssetType.Image) { if (!_imagesService.SaveToDisk(a)) return BadRequest("不是有效的图片格式"); } //else if (a.AssetType == AssetType.Positon) // await _assetsService.Add(a); } string failsMessage = ""; value.County_id = "004038694b4540c4b218cb22d011e10e"; value.Unit_id = "2014101416995276299"; value.OpenID = HttpContext.Session.GetString("OpenId"); await _bundlesService.Add(value); if (await _xfApiService.PostLetter(value, HttpContext.Request.Cookies["BaseUrl"], e => failsMessage = e)) { return Ok(); } await _bundlesService.Delete(value); return BadRequest(failsMessage); } // PUT api/values/5 [HttpPut("{id}")] public void Put(int id, [FromBody]string value) { } // DELETE api/values/5 [HttpDelete("{id}")] public void Delete(int id) { } } }