public IActionResult GetRootContainer()
        {
            var authorizationHeader = HttpContext.Request.Headers["Authorization"];
            var ecosystemOperation  = HttpContext.Request.Headers["X-WOPI-EcosystemOperation"];

            if (ValidateAuthorizationHeader(authorizationHeader))
            {
                var accessToken = GenerateAccessToken();
                BootstrapRootContainerInfo bootstrapRoot = new BootstrapRootContainerInfo
                {
                    Bootstrap = new BootstrapInfo
                    {
                        EcosystemUrl     = "",
                        SignInName       = "",
                        UserFriendlyName = "",
                        UserId           = ""
                    }
                };
                if (ecosystemOperation == "GET_ROOT_CONTAINER")
                {
                    //TODO: implement bootstrap + token
                    bootstrapRoot.RootContainerInfo = new RootContainerInfo
                    {
                        ContainerPointer = new ChildContainer
                        {
                            Name = StorageProvider.RootContainerPointer.Name,
                            Url  = GetChildUrl("containers", StorageProvider.RootContainerPointer.Identifier, accessToken)
                        }
                    };
                }
                else if (ecosystemOperation == "GET_NEW_ACCESS_TOKEN")
                {
                    //TODO: set expiration
                    bootstrapRoot.AccessTokenInfo = new AccessTokenInfo
                    {
                        AccessToken       = accessToken,
                        AccessTokenExpiry = 0
                    };
                }
                else
                {
                    return(new NotImplementedResult());
                }
                return(new JsonResult(bootstrapRoot));
            }
            else
            {
                //TODO: implement WWW-authentication header https://wopirest.readthedocs.io/en/latest/bootstrapper/Bootstrap.html#www-authenticate-header
                string authorizationUri = "https://contoso.com/api/oauth2/authorize";
                string tokenIssuanceUri = "https://contoso.com/api/oauth2/token";
                string providerId       = "tp_contoso";
                string urlSchemes       = Uri.EscapeDataString("{\"iOS\" : [\"contoso\",\"contoso - EMM\"], \"Android\" : [\"contoso\",\"contoso - EMM\"], \"UWP\": [\"contoso\",\"contoso - EMM\"]}");
                Response.Headers.Add("WWW-Authenticate", $"Bearer authorization_uri=\"{authorizationUri}\",tokenIssuance_uri=\"{tokenIssuanceUri}\",providerId=\"{providerId}\", UrlSchemes=\"{urlSchemes}\"");
                return(new UnauthorizedResult());
            }
        }
Пример #2
0
        public IActionResult GetRootContainer()
        {
            var authorizationHeader = HttpContext.Request.Headers["Authorization"];
            var ecosystemOperation  = HttpContext.Request.Headers[WopiHeaders.ECOSYSTEM_OPERATION];
            var wopiSrc             = HttpContext.Request.Headers[WopiHeaders.WOPI_SRC].FirstOrDefault();

            if (ValidateAuthorizationHeader(authorizationHeader))
            {
                //TODO: supply user
                var user = "******";

                //TODO: implement bootstrap
                var bootstrapRoot = new BootstrapRootContainerInfo
                {
                    Bootstrap = new BootstrapInfo
                    {
                        EcosystemUrl     = GetWopiUrl("ecosystem", accessToken: "TODO"),
                        SignInName       = "",
                        UserFriendlyName = "",
                        UserId           = ""
                    }
                };
                if (ecosystemOperation == "GET_ROOT_CONTAINER")
                {
                    var resourceId = StorageProvider.RootContainerPointer.Identifier;
                    var token      = SecurityHandler.GenerateAccessToken(user, resourceId);

                    bootstrapRoot.RootContainerInfo = new RootContainerInfo
                    {
                        ContainerPointer = new ChildContainer
                        {
                            Name = StorageProvider.RootContainerPointer.Name,
                            Url  = GetWopiUrl("containers", resourceId, SecurityHandler.WriteToken(token))
                        }
                    };
                }
                else if (ecosystemOperation == "GET_NEW_ACCESS_TOKEN")
                {
                    var token = SecurityHandler.GenerateAccessToken(user, GetIdFromUrl(wopiSrc));

                    bootstrapRoot.AccessTokenInfo = new AccessTokenInfo
                    {
                        AccessToken       = SecurityHandler.WriteToken(token),
                        AccessTokenExpiry = token.ValidTo.ToUnixTimestamp()
                    };
                }
                else
                {
                    return(new NotImplementedResult());
                }
                return(new JsonResult(bootstrapRoot));
            }
            else
            {
                //TODO: implement WWW-authentication header https://wopirest.readthedocs.io/en/latest/bootstrapper/Bootstrap.html#www-authenticate-header
                var authorizationUri = "https://contoso.com/api/oauth2/authorize";
                var tokenIssuanceUri = "https://contoso.com/api/oauth2/token";
                var providerId       = "tp_contoso";
                var urlSchemes       = Uri.EscapeDataString("{\"iOS\" : [\"contoso\",\"contoso - EMM\"], \"Android\" : [\"contoso\",\"contoso - EMM\"], \"UWP\": [\"contoso\",\"contoso - EMM\"]}");
                Response.Headers.Add("WWW-Authenticate", $"Bearer authorization_uri=\"{authorizationUri}\",tokenIssuance_uri=\"{tokenIssuanceUri}\",providerId=\"{providerId}\", UrlSchemes=\"{urlSchemes}\"");
                return(new UnauthorizedResult());
            }
        }