예제 #1
0
        private void Load(string data)
        {
            _data = data;

            try
            {
                // Load config from XML

                var xml = XDocument.Parse(data);

                if (xml.Root.Name.LocalName != "Manifest")
                {
                    Log.Write("Root XML element '{0}' is not recognized, stopping.", xml.Root.Name);
                    return;
                }

                // Set properties.

                Version       = int.Parse(xml.Root.Attribute("version").Value);
                CheckInterval = int.Parse(xml.Root.Element("CheckInterval").Value);
                SecurityToken = xml.Root.Element("SecurityToken").Value;
                //RemoteConfigUri = xml.Root.Element("RemoteConfigUri").Value;
                BaseFileName      = xml.Root.Element("BaseFileName").Value;
                BaseFileExtension = xml.Root.Element("BaseFileExtension").Value;
                BaseUri           = xml.Root.Element("BaseUri").Value;
                RemoteConfigUri   = BaseUri + BaseFileName.Trim() + (Version + 1).ToString() + BaseFileExtension;
                Payloads          = xml.Root.Elements("Payload").Select(x => x.Value).ToArray();
            }

            catch (Exception ex)
            {
                Log.Write("Error: {0}", ex.Message);
                return;
            }
        }
예제 #2
0
        public async System.Threading.Tasks.Task <string> Url(UserAction ua = null)
        {
            if (ua == null)
            {
                ua = new UserAction();
            }

            // Use discovery to determine endpoint to leverage
            List <WopiAction> discoData = await WopiUtil.GetDiscoveryInfo();

            var fileExt = BaseFileName.Substring(BaseFileName.LastIndexOf('.') + 1).ToLower();
            var action  = discoData.FirstOrDefault(i => i.name == ua.Action && i.ext == fileExt);

            if (action != null)
            {
                string urlsrc = WopiUtil.GetActionUrl(action, this, ServerUtil.Config().Domain);

                WopiSecurity wopiSecurity = new WopiSecurity();

                var token = wopiSecurity.GenerateToken(id.ToString(), ua.UserId, ua.UserDisplayName);

                if (action.name == "edit")
                {
                    token.ReadOnly = false;
                }
                else
                {
                    token.ReadOnly = true;
                }
                token.Save();

                return(String.Format("{0}&access_token={1}&access_token_ttl={2}", urlsrc, token.Identity, token.ValidTo().Subtract(new DateTime(1970, 1, 1)).TotalMilliseconds.ToString()));
            }
            else
            {
                // This will only hit if the extension isn't supported by WOPI
                throw new Exception("Bad action on this file.");
            }
        }