/// <summary> /// /// </summary> /// <param name="server"></param> /// <param name="context"></param> /// <param name="callbackEndPoint"></param> /// <param name="cancel"></param> public override void Run(IHostServer server, WebContext context, string callbackEndPoint, CancellationToken cancel) { var container = server.Container; if (container == null) { throw new Exception("Cannot access container"); } var caProxy = container.Get<ICaWrapper>(); if (caProxy == null) { throw new Exception("Cannot access CA proxy"); } if (context.PreparedParameters == null) { context.PreparedParameters = RequestParameters.Create(context); } var certId = context.PreparedParameters.Get("cert"); var message = context.PreparedParameters.Get("message"); if (string.IsNullOrWhiteSpace(certId)) { throw new ArgumentException("Empty certificate fingerprint"); } if (string.IsNullOrWhiteSpace(message)) { throw new ArgumentException("Empty encrypted message"); } var user = caProxy.ProcessAuth(certId, message); if (user != null) { var result = ProcessUserLogin(user, server, context); var strResult = result.Result.stringify(); context.Finish(strResult); return; } context.Finish("false"); }
public void Run(IHostServer server, WebContext context, string callbackEndPoint, CancellationToken cancel) { var id = context.User.Identity as Identity; if(null==id)throw new Exception("invalid identity type"); if (null == id.ImpersonationSource) { if(!id.IsAdmin)throw new Exception("not admin"); } var src = id.ImpersonationSource ?? id; var p = RequestParameters.Create(context); var to = p.Get("login"); Identity newid = null; if (string.IsNullOrWhiteSpace(to)) { newid = (Identity)src; } else { var user = Users.GetUser(to); if (null != user) { newid = new Identity(user); } else { newid =new Identity{Name = to, IsAuthenticated = true}; } newid.ImpersonationSource = src; } context.User = new GenericPrincipal(newid,null); var token = TokenService.Create(context.Request); newid.Token = token; TokenService.Store(context.Response,context.Request.Uri,token); context.Finish(newid.stringify()); }
/// <summary> /// /// </summary> /// <param name="server"></param> /// <param name="context"></param> /// <param name="callbackEndPoint"></param> /// <param name="cancel"></param> public override void Run(IHostServer server, WebContext context, string callbackEndPoint, CancellationToken cancel) { if (context.PreparedParameters == null) { context.PreparedParameters = RequestParameters.Create(context); } var preparedParams = context.PreparedParameters; var fingerprint = preparedParams.Get("cert"); var cms = preparedParams.Get("message"); var container = server.Container; var caConfigProvider = container.Get<ICaConfigProvider>(); if (caConfigProvider == null) { throw new Exception("Cannot get CA config"); } var caConfig = caConfigProvider.GetConfig(); if (caConfig == null || !caConfig.GetIsValid()) { throw new Exception("Not valid CA config"); } var cmsDecryptor = new CmsDecryptor(); cmsDecryptor.Initialize(caConfig); var cmsMessage = new CmsMessage { CertificateFingerprint = fingerprint, EncryptedMessage = cms }; context.ContentType = MimeHelper.JSON; string salt; lock (TokenAuthGetSaltHandler.Sync) { salt = TokenAuthGetSaltHandler.Salts[fingerprint].Value; } var message = cmsDecryptor.Descrypt(cmsMessage); var result = message != salt ? "false" : "true"; context.Finish(result); }
public override void Run(IHostServer server, WebContext context, string callbackEndPoint, CancellationToken cancel) { var container = server.Container; if (container == null) { throw new Exception("Cannot access container"); } if (context.PreparedParameters == null) { context.PreparedParameters = RequestParameters.Create(context); } var certId = context.PreparedParameters.Get("cert"); if (string.IsNullOrWhiteSpace(certId)) { throw new ArgumentException("Empty certificate fingerprint"); } var hostConfigProvider = container.Get<IHostConfigProvider>(); if (hostConfigProvider == null) { throw new Exception("Cannot resolve server role"); } var hostConfig = hostConfigProvider.GetConfig(); if (hostConfig == null) { throw new Exception("Cannot resolve server role"); } var definition = hostConfig.Definition; if (definition == null) { throw new Exception("Cannot resolve server role"); } var caAttr = definition.Attr("ca"); if (!string.IsNullOrWhiteSpace(caAttr) && caAttr.To<bool>()) { lock (Sync) { Salt saltObj; if (Salts.ContainsKey(certId)) { saltObj = Salts[certId]; if (saltObj.Expire <= DateTime.UtcNow) { saltObj = new Salt { Value = Guid.NewGuid().ToString(), Expire = DateTime.UtcNow.AddHours(1) }; Salts[certId] = saltObj; } } else { saltObj = new Salt { Value = Guid.NewGuid().ToString(), Expire = DateTime.UtcNow.AddHours(1) }; Salts[certId] = saltObj; } context.Finish("\"" + saltObj.Value + "\""); CleanUpExpiredSaltsInternal(); return; } } var caProxy = container.Get<ICaWrapper>(); if (caProxy == null) { throw new Exception("Cannot access CA proxy"); } context.ContentType = MimeHelper.JSON; var salt = caProxy.GetSalt(certId); context.Finish(salt); }
public override void Run(IHostServer server, WebContext context, string callbackEndPoint, CancellationToken cancel) { var data = RequestParameters.Create(context); var name = data.Get("name"); var content = data.Get("content"); if (data.PostData.StartsWith("{")) { var json = Experiments.Json.Parse(data.PostData); name = (string)Experiments.Json.Get(json, "name"); content = (string)Experiments.Json.Get(json, "content"); } if (name.StartsWith("/") || name.Contains("..")) { throw new Exception("wrong and not-secure path " + name); } var root = EnvironmentInfo.ResolvePath("@repos@/.appdata"); var fileName = Path.Combine(root, name); Directory.CreateDirectory(Path.GetDirectoryName(fileName)); File.WriteAllText(fileName, content); context.Finish("OK"); }
public void Run(IHostServer server, WebContext context, string callbackEndPoint, CancellationToken cancel) { if (null!=Override) { if (Override(this, server, context)) { return; } } var error = GetError?.Invoke(this, server, context) ?? Error; if (null != error) { throw error; } var status = GetStatus?.Invoke(this, server, context) ?? Status; var mime = GetMime?.Invoke(this, server, context) ?? Mime; var content = GetContent?.Invoke(this, server, context) ?? Content; var timeout = GetTimeout?.Invoke(this, server, context) ?? Timeout; if (0 < timeout) { Thread.Sleep(timeout); } context.Finish(content,mime,status); }
private void RenderAsWiki(XElement x, WebContext r){ var sb = new StringBuilder(); BuildWiki(sb, x); r.Finish(sb.ToString(), "text/html"); }
private void RenderAsNative(XElement x, WebContext r) { r.Finish(x.ToString(), "text/xml"); }