/// <summary> /// GET: WopiFrame /// </summary> /// <param name="id">File name</param> /// <returns>A ViewResult object</returns> public ActionResult Index(string id) { string sourceDoc = id.ToLower(); string uid = ConfigurationManager.AppSettings["BrowserUserName"].ToLower(); string access_token = AccessTokenUtil.WriteToken(AccessTokenUtil.GenerateToken(uid, sourceDoc)); List <WopiAction> actions = DiscoveryUtil.GetDiscoveryInfo(); string extention = sourceDoc.Split('.')[sourceDoc.Split('.').Length - 1]; WopiAction action = actions.FirstOrDefault(i => i.ext == extention && i.name == "view"); string urlSrc = action.urlsrc; urlSrc = string.Format("{0}WOPISrc={1}", urlSrc.Substring(0, urlSrc.IndexOf('<')), HttpUtility.UrlEncode(string.Format("http://{0}/wopi/files/{1}", ConfigurationManager.AppSettings["WOPIServerName"], HttpUtility.UrlEncode(sourceDoc)))); urlSrc = urlSrc.ToLower().Replace(ConfigurationManager.AppSettings["OfficeServerName"].ToLower().Trim(), ConfigurationManager.AppSettings["OfficeServerIP"]); urlSrc = string.Format("{0}&access_token={1}", urlSrc, HttpUtility.UrlEncode(access_token)); ViewData["URL"] = urlSrc; return(View()); }
protected override async void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); StatusBarUtil.SetColorStatusBars(this); SetContentView(Resource.Layout.SplashScreen); var tokenTemp = AccessTokenUtil.GetToken(this); ClipboardManager cm = (ClipboardManager)GetSystemService(Context.ClipboardService); ClipData cldata = ClipData.NewPlainText("label", "cnblogs.com"); cm.PrimaryClip = cldata; if (string.IsNullOrEmpty(tokenTemp.access_token) || tokenTemp.IsExpire) { await AuthorizationRequest.Client_Credentials((token) => { token.RefreshTime = DateTime.Now; AccessTokenUtil.SaveToken(token, this); }, error => { System.Diagnostics.Debug.Write(error); }); } Handler handler = new Handler(); handler.PostDelayed((() => { StartActivity(new Intent(this, typeof(MainActivity))); this.Finish(); }), 2000); // Create your application here }
/// <summary> /// Validate that the provided access token is valid to get access to requested resource. /// </summary> /// <param name="requestData">Request information, including requested file Id</param> /// <param name="writeAccessRequired">Whether write permission is requested or not.</param> /// <returns>true when access token is correct and user has access to document, false otherwise.</returns> private static bool ValidateAccess(WopiRequest requestData, bool writeAccessRequired) { //// TODO: Access token validation is not implemented in this sample. //// For more details on access tokens, see the documentation //// https://wopi.readthedocs.io/projects/wopirest/en/latest/concepts.html#term-access-token //return !String.IsNullOrWhiteSpace(requestData.AccessToken); if (AccessTokenUtil.ValidateToken(requestData.AccessToken, requestData.Id.ToLower())) { string userName = AccessTokenUtil.GetUserFromToken(requestData.AccessToken); string userPermission = AccessTokenUtil.readUserXml(uid, requestData.Id); if (userPermission.Equals("none")) { return(false); } else if (!writeAccessRequired || (userPermission.Equals("write") && writeAccessRequired)) { return(true); } } return(false); }
/// <summary> /// 在Action执行之前调用 /// </summary> /// <param name="context"></param> /// <returns></returns> public void OnActionExecuting(ActionExecutingContext context) { ContractResult result = new ContractResult(); var baseController = ((BaseOAuthController)context.Controller); if (baseController.UserTicket != null) { baseController.UserTicket = AccessTokenUtil.RefreshToken(baseController.Account.AppId, baseController.UserTicket); return; } string codeKey = context.HttpContext.Request.Query.Keys.FirstOrDefault(key => key.ToLower() == "code"); if (!string.IsNullOrEmpty(codeKey)) { string secretKey = baseController.Account.SecretKey; string code = context.HttpContext.Request.Query[codeKey]; baseController.UserTicket = AccessTokenUtil.GetOAuthToken(baseController.Account.AppId, code, baseController.Account.SecretKey); } else { string authorizeUrl = WeChatSettingsUtil.Settings.AuthorizeUrl; string urlKey = context.HttpContext.Request.Query.Keys.FirstOrDefault(key => key.ToLower() == "url"); if (string.IsNullOrEmpty(urlKey)) { result.SetError(ErrorCodeType.InvalidUrl); context.Result = new JsonResult(result); return; } string redirect_uri = context.HttpContext.Request.Query[urlKey]; string location = $"{authorizeUrl}?appid={baseController.Account.AppId}&redirect_uri={redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"; context.Result = new RedirectResult(location);//302重定向跳转 } }
// GET: WopiValidator public ActionResult Index(string id) { WopiValidator wvModel = new WopiValidator(); wvModel.FileName = id; string sourceDoc = id.ToLower(); string uid = "TestUser".ToLower(); wvModel.AccessToken = AccessTokenUtil.WriteToken(AccessTokenUtil.GenerateToken(uid, sourceDoc)); wvModel.HostURL = string.Format("http://{0}/wopi/files/{1}", ConfigurationManager.AppSettings["WOPIServerName"], HttpUtility.UrlEncode(sourceDoc)); return(View(wvModel)); }