public string CreateDocument(string name) { string docId; lock (lockObject) { while (true) { docId = ShortIdGenerator.Next(); if (docs.Exists(x => x.DocId == docId)) { continue; } if (File.Exists(getDocFileName(docId))) { continue; } break; } var newDoc = new Document(docId, name); docs.Add(newDoc); newDoc.SaveToFile(getDocFileName(docId)); } return(docId); }
public void Login(string secret, out string sessionId, out DateTime sessionExpiryUtc) { sessionId = null; sessionExpiryUtc = DateTime.MinValue; lock (sessions) { HashSet <string> secrets = readSecrets(); if (!secrets.Contains(secret)) { return; } sessionId = ShortIdGenerator.Next(); while (sessions.ContainsKey(sessionId)) { sessionId = ShortIdGenerator.Next(); } sessionExpiryUtc = DateTime.UtcNow.AddMinutes(sessionTimeoutMin); sessions[sessionId] = sessionExpiryUtc; } }
public string RequestSession(string docId) { string sessionKey = null; lock (lockObject) { ensureDocLoaded(docId); if (!docs.Exists(x => x.DocId == docId)) { return(null); } while (true) { sessionKey = ShortIdGenerator.Next(); if (!sessions.Exists(x => x.SessionKey == sessionKey)) { break; } } sessions.Add(new Session(sessionKey, docId)); } return(sessionKey); }
public async Task <string> ExportDocx(string docId) { XieChar[] text = null; lock (lockObject) { ensureDocLoaded(docId); var doc = docs.Find(x => x.DocId == docId); if (doc == null) { return(null); } text = new XieChar[doc.HeadText.Length]; for (int i = 0; i < text.Length; ++i) { text[i] = doc.HeadText[i]; } } var exportFileName = docId + "-" + ShortIdGenerator.Next() + ".docx"; var exportFilePath = Path.Combine(options.ExportsFolder, exportFileName); var exporter = new DocxExporter(composer, text, exportFilePath); await exporter.Export(); return(exportFileName); }