Example #1
0
	public override void Handle(HttpRequestEventArgs args, string requestuestPath, string localPath)
	{
		var request = args.Request;
		var response = args.Response;

		if (!LoginServer.Instance.Conf.Login.IsTrustedSource(request.ClientIp))
			return;

		var name = request.Parameter("name");
		var pass = request.Parameter("pass");

		// Check parameters
		if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(pass))
		{
			response.Send("0");
			return;
		}

		// Get account
		var account = LoginServer.Instance.Database.GetAccount(name);
		if (account == null)
		{
			response.Send("0");
			return;
		}

		// Check password
		var passwordCorrect = Password.Check(pass, account.Password);

		// Response
		response.Send(passwordCorrect ? "1" : "0");
	}
Example #2
0
	public override void Handle(HttpRequestEventArgs args, string requestuestPath, string localPath)
	{
		var request = args.Request;
		var response = args.Response;

		response.ContentType = "text/css";
		response.CacheControl = "public, max-age: 3600";

		if (cache == null)
		{
			var sb = new StringBuilder();
			foreach (var entry in AuraData.FeaturesDb.Entries)
			{
				var feature = entry.Value.Name;
				var enabled = entry.Value.Enabled;

				sb.AppendLine(string.Format("*[data-feature='{0}']  {{ display: {1}; }}", feature, enabled ? "inline" : "none"));
				sb.AppendLine(string.Format("*[data-feature='!{0}'] {{ display: {1}; }}", feature, !enabled ? "inline" : "none"));
			}

			cache = sb.ToString();
		}

		response.Send(cache);
	}
Example #3
0
		protected virtual void TriggerHttpRequest(HttpRequestEventArgs e)
		{
			if (this.HttpRequest != null)
			{
				this.HttpRequest(this, e);
			}
		}
Example #4
0
	public override void Handle(HttpRequestEventArgs args, string requestuestPath, string localPath)
	{
		var request = args.Request;
		var response = args.Response;

		var status = this.CreateStatusText();

		response.Headers.Add("Access-Control-Allow-Origin", "*");
		response.ContentType = "text/plain";
		response.Send(status);
	}
 public void AddHttpRequestMessage(HttpRequestEventArgs e)
 {
     HttpWebRequest request = e.Request;
     ListBoxItem lbi = new ListBoxItem();
     string headers = "";
     headers += request.Method + " " + request.RequestUri + "\n";
     headers = request.Headers.Cast<string>().Aggregate(headers, (current, key) => current + (key + ":" + request.Headers[key] + "\n"));
     lbi.Content = request.Method;
     lbi.Tag = headers + e.Content;
     lbi.ToolTip = headers + e.Content;
     Debug_http_msg_listbox.Items.Add(lbi);
 }
Example #6
0
        void Server_RequestReceived(object sender, HttpRequestEventArgs e)
        {
            foreach (var handler in _handlers)
            {
                if (handler.Path == e.Request.Path)
                {
                    handler.Handle(e.Context);
                    return;
                }
            }

            Assert.Fail("No handler matched '{0}'", e.Request.Path);
        }
Example #7
0
        private static void WebServer_IncomingRequest(object sender, HttpRequestEventArgs e)
        {
            HttpListenerContext httpContext = e.RequestContext;

            try
            {
                HandleRequest(httpContext);
            }
            catch (Exception exception)
            {

                Console.WriteLine(exception);

            }
        }
Example #8
0
	public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath)
	{
		var request = args.Request;
		var response = args.Response;

		response.ContentType = "text/plain";

		// Get file
		var file = request.File("ui");
		if (file == null)
		{
			Log.Debug("UiStorageController: Missing file.");
			return;
		}

		// Check file name
		if (!Regex.IsMatch(file.FileName, @"^[0-9]{16}\.xml$"))
		{
			Log.Debug("UiStorageController: Invalid file name '{0}'.", file.FileName);
			return;
		}

		var charId = request.Parameter("char_id", null);
		var serverName = request.Parameter("name_server", null);
		var loadSuccess = request.Parameter("ui_load_success", null);

		// Check parameters
		if (!Regex.IsMatch(charId, @"^[0-9]{16}$") || !Regex.IsMatch(charId, @"^[0-9A-Za-z_ ]+$"))
		{
			Log.Debug("UiStorageController: Invalid character id ({0}) or server name ({1}).", charId, serverName);
			return;
		}

		var group = charId.Substring(charId.Length - 3);

		// Move file
		try
		{
			file.MoveTo("user/web/upload/ui/" + serverName + "/" + group + "/" + file.FileName);
		}
		catch (Exception ex)
		{
			Log.Exception(ex, "UiStorageController: Failed to move file.");
		}

		// Success
		response.Send("1");
	}
Example #9
0
	public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath)
	{
		var request = args.Request;
		var response = args.Response;
		var server = args.Context.Server;

		if (pages == null)
			pages = GetPages(server);

		var handlebars = server.GetEngine("hbs");
		var commonmark = server.GetEngine("md");

		Page page = null;
		string content;

		var pageTitle = GetPageName(request.RawQueryString);
		if (string.IsNullOrWhiteSpace(pageTitle))
			pageTitle = DefaultPageTitle;

		if (pages.TryGetValue(pageTitle, out page))
		{
			var pageFilePath = server.GetLocalPath("wiki/pages/" + page.FileName + ".md");

			if (page.Contents == null || File.GetLastWriteTime(pageFilePath) > page.LastUpdate)
			{
				page.Contents = GetPageContents(server, pageFilePath);
				page.LastUpdate = DateTime.Now;
			}

			content = page.Contents;
		}
		else
		{
			content = handlebars.RenderFile(server.GetLocalPath("wiki/templates/notfound.htm"), new { pageTitle });
		}

		var sidebar = commonmark.RenderFile(server.GetLocalPath("wiki/pages/sidebar.md"));

		// Render
		response.Send(handlebars.RenderFile(server.GetLocalPath("wiki/templates/main.htm"), new
		{
			sidebar,
			content,
		}));
	}
Example #10
0
	public override void Handle(HttpRequestEventArgs args, string requestuestPath, string localPath)
	{
		var request = args.Request;
		var response = args.Response;

		if (!LoginServer.Instance.Conf.Login.IsTrustedSource(request.ClientIp))
			return;

		var msg = request.Parameter("msg", null);
		if (string.IsNullOrWhiteSpace(msg))
		{
			response.Send("0");
			return;
		}

		Send.Internal_Broadcast(msg);

		response.Send("1");
	}
Example #11
0
	public override void Handle(HttpRequestEventArgs args, string requestuestPath, string localPath)
	{
		var request = args.Request;
		var response = args.Response;
		var server = args.Context.Server;

		var handlebars = server.GetEngine("hbs");

		var onlineCharacters = GetOnlineCharacters();
		var onlineCount = onlineCharacters.Count;
		var anyOnline = onlineCount != 0;

		// Render
		response.Send(handlebars.RenderFile(server.GetLocalPath("online-list/templates/main.htm"), new
		{
			onlineCharacters,
			onlineCount,
			anyOnline,
		}));
	}
Example #12
0
	public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath)
	{
		var request = args.Request;
		var response = args.Response;

		var charId = request.Parameter("char_id");
		var serverName = request.Parameter("name_server");
		var userFile = request.File("userfile");
		var userText = request.File("usertext");

		if (charId == null || !Regex.IsMatch(charId, @"^[0-9]+$") || serverName == null || !Regex.IsMatch(serverName, @"^[0-9A-Za-z_]+$") || userFile == null || userText == null)
			return;

		var key = charId.Substring(charId.Length - 3);
		var folder = "user/web/upload/avatar/" + serverName + "/" + key + "/" + charId + "/";

		userFile.MoveTo(folder + "snapshot.jpg");
		userText.MoveTo(folder + "snapshot.txt");

		response.Send("1");
	}
Example #13
0
	public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath)
	{
		var request = args.Request;
		var response = args.Response;

		var server = request.Parameter("server", "");
		var characterId = request.Parameter("characterid", "");
		var characterName = request.Parameter("charname", "");
		var file = request.File("filename");

		// Check char name
		if (!Regex.IsMatch(characterName, @"^[0-9A-Za-z_]+$"))
		{
			Log.Debug("UploadVisualChatController: Invalid character name ({0}).", characterName);
			return;
		}

		// Check file
		if (file == null)
		{
			Log.Debug("UploadVisualChatController: File missing (Names: {0}).", string.Join(", ", request.Files.AllKeys));
			return;
		}

		if (file.FileName != "visualchat.png" || file.ContentType != "image/png")
		{
			Log.Debug("UploadVisualChatController: Invalid file ({0}, {1}).", file.FileName, file.ContentType);
			return;
		}

		// Move file
		var fileName = string.Format("chat_{0:yyyyMMdd_HHmmss}_{1}.png", DateTime.Now, characterName);
		file.MoveTo("user/web/upload/visual-chat/" + fileName);

		// Response, URL to image
		response.Send(string.Format("http://{0}:{1}/upload/visual-chat/{2}", request.LocalEndPoint.Address, request.HttpPort, fileName));
	}
Example #14
0
    public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath)
    {
        var request  = args.Request;
        var response = args.Response;
        var server   = args.Context.Server;

        var guildIdStr     = request.Parameter("guildid");
        var accountName    = request.Parameter("userid");
        var serverName     = request.Parameter("userserver");
        var characterIdStr = request.Parameter("userchar");
        var sessionKeyStr  = request.Parameter("key");

        // Check parameters
        if (guildIdStr == null || accountName == null || serverName == null || characterIdStr == null || sessionKeyStr == null)
        {
            response.Send("Invalid parameter (1).");
            return;
        }

        if (!_number.IsMatch(guildIdStr) || !_number.IsMatch(characterIdStr) || !_number.IsMatch(sessionKeyStr))
        {
            response.Send("Invalid parameter (2).");
            return;
        }

        var guildId     = Convert.ToInt64(guildIdStr);
        var characterId = Convert.ToInt64(characterIdStr);
        var sessionKey  = Convert.ToInt64(sessionKeyStr);

        // Check session
        if (!WebServer.Instance.Database.CheckSession(accountName, sessionKey))
        {
            response.Send("Please log in first.");
            return;
        }

        // Check character
        if (!WebServer.Instance.Database.AccountHasCharacter(accountName, characterId, serverName))
        {
            response.Send("Invalid character.");
            return;
        }

        // Check guild
        var guild = WebServer.Instance.Database.GetGuild(guildId);

        if (guild == null)
        {
            response.Send("Guild not found.");
            return;
        }

        // Check member
        var guildMember = guild.GetMember(characterId);

        if (guildMember == null)
        {
            response.Send("You're not a member of this guild.");
            return;
        }

        // Determine ability to level up
        var levelUpDisabled     = true;
        var levelUpRequirements = "";

        if (guild.Level < GuildLevel.Grand)
        {
            int points, gold;
            if (guild.GetLevelUpRequirements(out points, out gold) && points < guild.Points && gold < guild.Gold)
            {
                levelUpDisabled = false;
            }

            levelUpRequirements = string.Format("Guild Points: {0:n0}, Gold: {1:n0}", points, gold);
        }

        string success = null;
        string error   = null;

        // Leader actions
        if (guildMember.IsLeader)
        {
            // Settings: Change messages
            if (request.Parameter("intro") != null)
            {
                this.ChangeMessages(request, guild, ref success, ref error);
            }
            // Settings: Change leader
            else if (request.Parameter("leader") != null)
            {
                this.ChangeLeader(request, guild, ref success, ref error);
            }
            // Settings: Disband
            else if (request.Parameter("disband") != null)
            {
                this.Disband(request, guild, ref success, ref error);
            }
            // Settings: Level up
            else if (!levelUpDisabled && request.Parameter("levelUp") != null)
            {
                this.LevelUp(request, guild, ref success, ref error);
            }
        }

        // Leader/Officer actions
        if (guildMember.IsLeaderOrOfficer)
        {
            // Members: Accept application
            if (request.Parameter("acceptApplication") != null)
            {
                var id     = Convert.ToInt64(request.Parameter("acceptApplication"));
                var member = guild.GetMember(id);
                if (member == null)
                {
                    error = "Applicant not found.";
                }
                else
                {
                    this.AcceptApplication(request, guild, member, ref success, ref error);
                }
            }
            // Members: Decline application
            else if (request.Parameter("declineApplication") != null)
            {
                var id     = Convert.ToInt64(request.Parameter("declineApplication"));
                var member = guild.GetMember(id);
                if (member == null)
                {
                    error = "Applicant not found.";
                }
                else
                {
                    this.DeclineApplication(request, guild, member, ref success, ref error);
                }
            }
            // Members: Remove member
            else if (request.Parameter("removeMember") != null)
            {
                var memberId = Convert.ToInt64(request.Parameter("removeMember"));
                var member   = guild.GetMember(memberId);
                if (member == null)
                {
                    error = "Character not found.";
                }
                else
                {
                    this.RemoveMember(request, guild, member, ref success, ref error);
                }
            }
        }

        // Applicant actions
        if (guildMember.IsApplicant)
        {
            // Menu: Cancel application
            if (request.Parameter("cancelApplication") != null)
            {
                this.CancelApplication(request, guild, guildMember, ref success, ref error);
            }
        }

        // Non-leader actions
        if (!guildMember.IsLeader)
        {
            // Menu: Leave guild
            if (request.Parameter("leaveGuild") != null)
            {
                this.LeaveGuild(request, guild, guildMember, ref success, ref error);
            }
        }

        // Get non-declined members, ordered by their rank and name, putting applicants after the leaders.
        var members = guild.GetMembers().Where(a => a.Rank != GuildMemberRank.Declined).OrderBy(a => a.Rank == GuildMemberRank.Applied ? 25 : (int)a.Rank * 10).ThenBy(a => a.Name);
        var url     = string.Format("/guild_home.cs?guildid={0}&userid={1}&userserver={2}&userchar={3}&key={4}", guildIdStr, accountName, serverName, characterIdStr, sessionKeyStr);

        // Render
        var engine = server.GetEngine("hbs");

        response.Send(engine.RenderFile(server.GetLocalPath("templates/guild.htm"), new
        {
            url                 = url,
            guild               = guild,
            members             = members,
            member              = guildMember,
            success             = success,
            error               = error,
            messageMaxLength    = MessageMaxLength,
            levelUpDisabled     = levelUpDisabled,
            levelUpRequirements = levelUpRequirements,
        }));
    }
Example #15
0
	public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath)
	{
		var request = args.Request;
		var response = args.Response;
		var server = args.Context.Server;

		var pageFolder = Path.GetDirectoryName(localPath);
		var templatePath = Path.Combine(pageFolder, "template.htm");

		var name = request.Parameter("name");
		var pass1 = request.Parameter("password1");
		var pass2 = request.Parameter("password2");

		var error = "";
		var success = "";

		if (name != null && pass1 != null && pass2 != null)
		{
			if (pass1 != pass2)
			{
				error = "The passwords don't match.";
				goto L_Send;
			}

			if (name.Length < 4)
			{
				name = "";
				error = "Username too short (min. 4 characters).";
				goto L_Send;
			}

			if (pass1.Length < 6)
			{
				error = "Password too short (min. 6 characters).";
				goto L_Send;
			}

			if (!Regex.IsMatch(name, @"^[0-9A-Za-z]+$"))
			{
				error = "Username contains invalid characters.";
				goto L_Send;
			}

			if (WebServer.Instance.Database.AccountExists(name))
			{
				error = "Account already exists.";
				goto L_Send;
			}

			var passHash = Password.RawToMD5SHA256(pass1);

			WebServer.Instance.Database.CreateAccount(name, passHash, 0);

			Log.Info("New account created: {0}", name);

			name = "";
			success = "Account created successfully.";
		}

	L_Send:
		var engine = server.GetEngine("hbs");
		response.Send(engine.RenderFile(templatePath, new { error, success, name }));
	}
Example #16
0
 private void HttpServerOnConnect(object sender, HttpRequestEventArgs e)
 {
     //HttpServer.Log.Debug(e.Request.UserAgent);
 }
Example #17
0
        private void HandleToken(RequestMethod method, HttpRequestEventArgs args, Authentication auth)
        {
            //Register the action
            auth.RecordAction("auth:token");

            //Make sure its a valid method
            if (method != RequestMethod.Post)
            {
                args.Response.WriteRest(new Rest.RestResponse(Rest.RestStatus.BadMethod, msg: "Post was expected"));
                return;
            }

            //Validate the payload
            if (args.Request.ContentType != ContentType.FormUrlEncoded || !args.Request.HasEntityBody)
            {
                args.Response.WriteRest(new RestResponse(RestStatus.BadRequest, msg: "The payload must be x-www-form-urlencoded"));
                return;
            }

            //Only bots can use this endpoint
            if (!auth.IsBot)
            {
                args.Response.WriteRest(new RestResponse(RestStatus.Forbidden, msg: "Only bots are allowed to use this endpoint"));
                return;
            }

            //Read the body
            byte[] buffer  = new byte[BUFFER_SIZE];
            int    len     = args.Request.InputStream.Read(buffer, 0, BUFFER_SIZE);
            string content = args.Request.ContentEncoding.GetString(buffer, 0, len);

            //Parse into a NVK then into a query
            NameValueCollection nvk = System.Web.HttpUtility.ParseQueryString(content);
            Query query             = new Query(nvk);

            //Validate the body
            string grantType, code;

            //============ Validate the code
            if (!query.TryGetString("code", out code))
            {
                args.Response.WriteRest(new RestResponse(RestStatus.BadRequest, msg: "Invalid Code. Missing."));
                return;
            }

            //============== Validate the grant
            if (!query.TryGetString("grant_type", out grantType) && !(grantType == "authorization_code" || grantType == "refresh_token"))
            {
                args.Response.WriteRest(new RestResponse(RestStatus.BadRequest, msg: "Invalid Grant"));
                return;
            }


            if (grantType == "refresh_token")
            {
                //We are going to refresh this users token.
                Authentication user = API.GetAuthenticationFromRefreshToken(code);
                if (user == null)
                {
                    args.Response.WriteRest(new RestResponse(RestStatus.BadRequest, msg: "Invalid Code"));
                    return;
                }

                //refresh the users token
                user.Token = GenerateToken(TimeSpan.FromHours(24), user.Name);
                args.Response.WriteRest(new RestResponse(RestStatus.OK, res: user.Token.Value));
                return;
            }

            if (grantType == "authorization_code")
            {
                //We are going to return a new token from the code.
                //Look for the pending token and remove it from the listing.
                bool foundToken = false;
                Authentication.AuthToken token;
                lock (_pendingTokenLock)
                {
                    if (_pendingTokens.TryGetValue(code, out token))
                    {
                        foundToken = true;
                        _pendingTokens.Remove(code);
                    }
                }

                //Make sure we actually found it
                if (!foundToken)
                {
                    args.Response.WriteRest(new RestResponse(RestStatus.BadRequest, msg: "Invalid Code"));
                    return;
                }

                //Return the new stuffs
                args.Response.WriteRest(new RestResponse(RestStatus.OK, res: token));
                return;
            }
        }
Example #18
0
        public void YRoute(YingRouteType ytype, HttpRequestEventArgs yargs)
        {
            getYConsole().sendYMessage($"{ytype.ToString()} > {yargs.Request.RawUrl}");

            //getYConsole().sendYMessage($"{ytype.ToString()} > {yargs.Request.RawUrl}");

            HttpListenerRequest  yrequest  = yargs.Request;
            HttpListenerResponse yresponse = yargs.Response;

            yroutes[ytype].ForEach((y) =>
            {
                if (y.isYMatch || yargs.Request.RawUrl == y.YUri)
                {
                    int ycount = Regex.Matches(yargs.Request.RawUrl, y.YUri).Count;
                    if (y.isYMatch && Regex.Matches(yargs.Request.RawUrl, y.YUri).Count == 0)
                    {
                        return;
                    }
                    try
                    {
                        YingResponse yyresponse = y.YAction.Invoke(yrequest);
                        YResponseBuilder(yresponse, HttpStatusCode.OK, yyresponse.ytype, Encoding.UTF8);
                        yresponse.WriteContent(yyresponse.ycontext);

                        /*try
                         * {
                         *  Regex yregex = new Regex("", RegexOptions.Compiled);
                         *  yregex.Match(Convert.ToString());
                         * }
                         * catch (FormatException yexception) { }
                         * catch (InvalidCastException yexception) { }
                         * catch (OverflowException yexception) { }
                         * catch (Exception yexception) { }*/
                    }
                    catch (YingAuthenticationException yexception)
                    {
                        YResponseBuilder(yresponse, (HttpStatusCode)yexception.getYCode(), ".json", Encoding.UTF8);

                        yresponse.WriteContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new YingError
                        {
                            error        = yexception.getYError(),
                            errorMessage = yexception.Message,
                            cause        = null
                        })));
                    }
                    catch (YingHttpException yexception)
                    {
                        YResponseBuilder(yresponse, (HttpStatusCode)yexception.getYCode(), ".html", Encoding.UTF8);
                    }
                    catch (Exception yexception)
                    {
                        YResponseBuilder(yresponse, HttpStatusCode.InternalServerError, ".html", Encoding.UTF8);
                    }
                    return;
                }
            });


            /*YResponseBuilder(yresponse, new YingResponseInfo
             * {
             *  YStatusCode = HttpStatusCode.NotFound,
             *  YStatusDescription = "Ying",
             *
             *  YContentType = YingMimeMapping.YGetMimeType(".json"),
             *  YContentEncoding = Encoding.UTF8
             * });*/

            /*yresponse.WriteContent(Encoding.UTF8.GetBytes("{\"Ying\": \"颖\"}" /*JsonMapper.ToJson()*/ /*));*/
            //y.Response.WriteContent
        }
Example #19
0
 public void OnHttpRequest(object aSender, HttpRequestEventArgs ea)
 {
     AddLog(String.Format("Request to {0}", ea.Request.Header.RequestPath));
 }
Example #20
0
        /// <summary>
        /// プロキシエンジンを指定して初期化
        /// </summary>
        /// <param name="engine">プロキシエンジン</param>
        public HttpProxy(Spi.IReadOnlyHttpProxyEngine engine)
        {
            this.proxyEngine         = engine;
            engine.HttpRequestSent  += (sender, args) => this.HttpRequestSent?.Invoke(sender, ReadOnlyHttpRequestEventArgs.Convert(args));
            engine.HttpResponseSent += (sender, args) => this.HttpResponseSent?.Invoke(sender, ReadOnlySessionEventArgs.Convert(args));
            engine.FatalException   += (sender, args) => this.FatalException?.Invoke(sender, ExceptionEventArgs.Convert(args));

            if (engine is Spi.IHttpProxyEngine writableEngine)
            {
                writableEngine.HttpRequestReceived  += (sender, args) => this.HttpRequestReceived?.Invoke(sender, HttpRequestEventArgs.Convert(args));
                writableEngine.HttpResponseReceived += (sender, args) => this.HttpResponseReceived?.Invoke(sender, SessionEventArgs.Convert(args));
            }
            if (engine is Spi.IReadOnlyWebSocketProxyEngine rowsEngine)
            {
                rowsEngine.ClientWebSocketMessageSent += (sender, args) => this.ClientWebSocketMessageSent?.Invoke(sender, ReadOnlyWebSocketMessageEventArgs.Convert(args));
                rowsEngine.ServerWebSocketMessageSent += (sender, args) => this.ServerWebSocketMessageSent?.Invoke(sender, ReadOnlyWebSocketMessageEventArgs.Convert(args));
            }
            if (engine is Spi.IWebSocketProxyEngine wsEngine)
            {
                wsEngine.ClientWebSocketMessageReceived += (sender, args) => this.ClientWebSocketMessageReceived?.Invoke(sender, WebSocketMessageEventArgs.Convert(args));
                wsEngine.ServerWebSocketMessageReceived += (sender, args) => this.ServerWebSocketMessageReceived?.Invoke(sender, WebSocketMessageEventArgs.Convert(args));
            }
        }
Example #21
0
 private void OnRequest(object sender, HttpRequestEventArgs args)
 {
     Router.HandleRequest(args.Request, args.Response);
 }
Example #22
0
        private void HandleRequest(object sender, HttpRequestEventArgs e)
        {
            var requestId = GetConnectedId();
            DumpConnectedInfo(requestId, e);

            e.RequestContext.Response.StatusCode = 200;
            e.RequestContext.Response.ContentType = contentType;

            var sourcei = _serverSource.GetSource();
            try
            {
                while (_serverSource.Reset(sourcei))
                {
                    while (!_serverSource.IsSourceEnded(sourcei))
                    {
                        var frame = _serverSource.GetNextFrame(sourcei, _settings.FrameDelay);
                        if (frame != null)
                        {
                            WriteFrame(e.RequestContext.Response.OutputStream, frame);
                            e.RequestContext.Response.OutputStream.Flush();
                        }
                    }
                }
                e.RequestContext.Response.OutputStream.Close();
            }
            finally
            {
                _serverSource.DisposeClient(sourcei);
                _log.Debug("{0} Disconnected", requestId);
            }
        }
Example #23
0
    public override void Handle(HttpRequestEventArgs args, string requestuestPath, string localPath)
    {
        var request  = args.Request;
        var response = args.Response;
        var server   = args.Context.Server;

        if (pages == null)
        {
            pages = GetPages(server);
        }

        var handlebars = server.GetEngine("hbs");
        var commonmark = server.GetEngine("md");

        var name   = "main";
        var exists = true;

        var pageName = GetPageName(request.RawQueryString);

        if (!string.IsNullOrWhiteSpace(pageName))
        {
            if (!pages.TryGetValue(pageName, out name))
            {
                exists = false;
            }
        }

        var pageFilePath = server.GetLocalPath("wiki/pages/" + name + ".md");

        if (pageFilePath == null)
        {
            exists = false;
        }

        string content;

        if (exists)
        {
            content = commonmark.RenderFile(pageFilePath);
        }
        else
        {
            content = handlebars.RenderFile(server.GetLocalPath("wiki/templates/notfound.htm"), new { pageName });
        }

        var sidebar = commonmark.RenderFile(server.GetLocalPath("wiki/pages/sidebar.md"));

        // Insert table of contents
        // (TODO: Cache, so it doesn't have to be done every time.)
        //if (content.Contains(_tocCheck))
        //{
        //	var toc = this.GenerateTableOfContents(ref content);
        //	content = content.Replace(_tocCheck, toc);
        //}

        // Render
        response.Send(handlebars.RenderFile(server.GetLocalPath("wiki/templates/main.htm"), new
        {
            sidebar,
            content,
        }));
    }
Example #24
0
 protected override void OnConnect(HttpRequestEventArgs ev)
 {
 }
        private void OnProcessGetRequestStarted()
        {
            HttpRequestEventArgs args = new HttpRequestEventArgs();

            ProcessGetRequestStarted?.Invoke(this, args);
        }
Example #26
0
        /// <summary>
        /// AresTcpSocket can also act as a miniature WebServer and can handle HEAD/GET/POST requests
        /// </summary>
        private void ClientHttpRequestReceived(object sender, HttpRequestEventArgs e)
        {
            if (!(sender is ISocket socket))
            {
                return;
            }

            Stats.PacketsReceived++;
            Stats.AddInput(e.Transferred);

            PendingConnection connection;

            lock (pending) connection = pending.Find(s => s.Equals(sender));

            if (connection != null)
            {
                //upgrading to a websocket connection?
                if (e.Headers.TryGetValue("CONNECTION", out string upgrade) &&
                    e.Headers.TryGetValue("UPGRADE", out string upgrade_type))
                {
                    if (Config.UseWebSockets)
                    {
                        e.Headers.TryGetValue("ORIGIN", out string origin);
                        e.Headers.TryGetValue("SEC-WEBSOCKET-VERSION", out string version);
                        e.Headers.TryGetValue("SEC-WEBSOCKET-KEY", out string key);

                        var my_headers = new Dictionary <string, string>();

                        if (!string.IsNullOrEmpty(origin))
                        {
                            my_headers.Add("Access-Control-Allow-Origin", origin);
                            my_headers.Add("Access-Control-Allow-Credentials", "true");
                            my_headers.Add("Access-Control-Allow-Headers", "content-type");
                        }

                        connection.Socket.IsWebSocket = true;
                        connection.Socket.SendBytes(Http.WebSocketAcceptHeaderBytes(key, my_headers.ToArray()));
                    }
                    else  //websockets disabled
                    {
                        Logging.Info(
                            "AresServer",
                            "Connection rejected from '{0}'. Chatroom is not configured to allow WebSocket connections.",
                            socket.RemoteEndPoint.Address
                            );

                        connection.Socket.Disconnect();
                    }
                }
                else if (PluginHost.OnHttpRequest(socket, e))
                {
                    Logging.Info(
                        "AresServer",
                        "Http request from '{0}' for resource '{1}' denied.",
                        socket.RemoteEndPoint.Address,
                        e.RequestUri
                        );
                    connection.Socket.Disconnect();
                }
            }
            else
            {
                //Http request is not from a pending connection
                IClient user = Users.Find(s => s.Socket == sender);
                //if not pending, they have at least sent a login packet but are processing,
                if (user != null && user.LoggedIn)
                {
                    if (PluginHost.OnHttpRequest(user, e))
                    {
                        Logging.Info(
                            "AresServer",
                            "Http request from '{0}' ({1}) for resource '{2}' denied.",
                            user.Name,
                            user.ExternalIp,
                            e.RequestUri
                            );
                    }
                }
                else
                {
                    //this doesn't appear to happen typically, it would just be racing against !LoggedIn if it did.
                    //dc for now unless it causes problems in the future.
                    connection.Socket.Disconnect();
                }
            }
        }
Example #27
0
        private async void HttpServer_RequestReceived(object sender, HttpRequestEventArgs e)
        {
            LogMessage("Request: " + e.Request.Uri.AbsolutePath);

            HttpResponse response = new HttpResponse();
            string       format;

            using (StreamWriter writer = new StreamWriter(response.Body))
            {
                writer.WriteLine("<html><head><title>WP8 HTTP Server</title></head><body>");
                switch (e.Request.Uri.AbsolutePath)
                {
                case "/":
                    writer.WriteLine("<h1>Welcome!</h1>");
                    writer.WriteLine("<ul>");
                    writer.WriteLine("<li><a href='device'>Device Information</a></li>");
                    writer.WriteLine("<li><a href='memory'>Memory Information</a></li>");
                    writer.WriteLine("<li><a href='date'>Current Date &amp; Time</a></li>");
                    writer.WriteLine("</ul>");
                    break;

                case "/device":
                    writer.WriteLine("<h1>Device Information</h1>");
                    writer.WriteLine("<ul>");
                    format = "<li><strong>{0}:</strong> {1}</li>";
                    writer.WriteLine(format, "OS Version", Environment.OSVersion);
                    writer.WriteLine(format, "Device Manufacturer", DeviceStatus.DeviceManufacturer);
                    writer.WriteLine(format, "Device Name", DeviceStatus.DeviceName);
                    writer.WriteLine(format, "Hardware Version", DeviceStatus.DeviceHardwareVersion);
                    writer.WriteLine(format, "Firmware Version", DeviceStatus.DeviceFirmwareVersion);
                    writer.WriteLine(format, "Current Power Source", DeviceStatus.PowerSource);
                    writer.WriteLine("</ul>");
                    writer.WriteLine("<a href='/'>Home</a>");
                    break;

                case "/memory":
                    writer.WriteLine("<h1>Memory Information</h1>");
                    writer.WriteLine("<ul>");
                    format = "<li><strong>{0}:</strong> {1:0.00} MB</li>";
                    writer.WriteLine(format, "App Memory Usage", DeviceStatus.ApplicationCurrentMemoryUsage / 1024d / 1024d);
                    writer.WriteLine(format, "App Peak Usage", DeviceStatus.ApplicationPeakMemoryUsage / 1024d / 1024d);
                    writer.WriteLine(format, "App Memory Limit", DeviceStatus.ApplicationMemoryUsageLimit / 1024d / 1024d);
                    writer.WriteLine(format, "Device Total Memory", DeviceStatus.DeviceTotalMemory / 1024d / 1024d);
                    writer.WriteLine("</ul>");
                    writer.WriteLine("<a href='/'>Home</a>");
                    break;

                case "/date":
                    writer.WriteLine("<h1>Current Date &amp; Time</h1>");
                    writer.WriteLine(DateTime.Now.ToString() + "<br /><br />");
                    writer.WriteLine("<a href='/'>Home</a>");
                    break;

                default:
                    response.StatusCode = HttpStatusCode.NotFound;
                    writer.WriteLine("<h1>404: Not found</h1>");
                    writer.WriteLine("<a href='/'>Home</a>");
                    break;
                }

                writer.WriteLine("</body></html>");
                writer.Flush();
                await e.Request.SendResponse(response);
            }
        }
Example #28
0
        private void nServer_RequestReceived(object sender, HttpRequestEventArgs e)
        {
            e.Response.Headers.Add("Connection", "close");
            e.Response.Headers.Add("Content-Encoding", "gzip");
            e.Response.Headers.Add("Content-Type", "application/xml;charset=utf-8");
            e.Response.Headers.Add("Status-Code", "200");

            log.Info(String.Format("Received Http-{0} request from {1}.", e.Request.HttpMethod, e.Request.RawUrl));

            Byte[]        baResponseArray = null;
            List <String> splittedPath    = new List <String>(e.Request.Path.Split('/'));

            String ioPath = Path.Combine(DataEx.dir_Server, e.Request.Path.Substring(1) + ".xml");

            if (splittedPath.Count >= 3)
            {
                String targetClassString = changeCaseFirst(splittedPath[2], true);
                if (splittedPath.Count == 3)
                {
                    splittedPath.Insert(0, "");
                    targetClassString = "Root";
                }
                Double  dummy;
                Boolean isNumber           = Double.TryParse(splittedPath[3], NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out dummy);
                String  targetMethodString = changeCaseFirst(isNumber ? splittedPath[4] : splittedPath[3], false);
                if (!supportedMethods.Contains(targetMethodString))
                {
                    log.Warn(String.Format("Method for {0} wasn't found, using fallback XML method.", targetMethodString));
                    if (File.Exists(ioPath))
                    {
                        log.Info(String.Format("Reading XML file {0}.", ioPath));
                        baResponseArray = getResponseData(File.ReadAllText(ioPath, Encoding.UTF8));
                    }
                    else
                    {
                        log.Warn(String.Format("File {0} wasn't found, sending only 200OK.", ioPath));
                    }
                }
                else
                {
                    Type       targetClass  = Type.GetType("OfflineServer.Servers.Http.Classes." + targetClassString);
                    MethodInfo targetMethod = targetClass.GetMethod(targetMethodString);
                    request = e.Request;
                    log.Info(String.Format("Processing OfflineServer.HttpServer.Classes.{0}.{1}().", targetClassString, targetMethodString));
                    baResponseArray = getResponseData((string)targetMethod.Invoke(null, null));
                }
            }
            else
            {
                if (File.Exists(ioPath))
                {
                    log.Info(String.Format("Reading XML file {0}.", ioPath));
                    baResponseArray = getResponseData(File.ReadAllText(ioPath, Encoding.UTF8));
                }
                else
                {
                    log.Warn(String.Format("File {0} wasn't found, sending only 200OK.", ioPath));
                }
            }

            if (baResponseArray == null)
            {
                baResponseArray = getResponseData(" ");
            }
            e.Response.OutputStream.Write(baResponseArray, 0, baResponseArray.Length);
            e.Response.OutputStream.Flush();

            // e.Request.RequestType gives the method used, GET - POST - PUSH etc.
            // e.Request.Url gives the full Uri including EVERYTHING
            // e.Request.RawUrl gives the Path following the IP. EX: if 127.0.0.1:4444/test/path.xml?test=true then /test/path.xml?test=true
            // e.Request.Path gives only the Path, not adding the params at the end. EX: if 127.0.0.1:4444/test/path.xml?test=true then /test/path.xml
            // e.Request.Params gives only the Params, not adding anything else.
        }
 private static void WebSock_OnGet(object sender, HttpRequestEventArgs e)
 {
     throw new NotImplementedException();
 }
Example #30
0
        private void HandleHTTPGet(object sender, HttpRequestEventArgs e)
        {
            var req = e.Request;
            var res = e.Response;

            var path = req.RawUrl;

            if (path.Contains("?"))
            {
                path = path.Split(new char [] { '?' }, 2)[0];
            }

            if (path == "/")
            {
                path += "index.html";
            }

            // Workarround for the React Single Page issue
            if (
                path.StartsWith("/console") ||
                path.StartsWith("/explorer") ||
                path.StartsWith("/charts") ||
                path.StartsWith("/config")
                )
            {
                path = "/index.html";
            }

            if (path.StartsWith(directoryHandler.BasePath))
            {
                try {
                    directoryHandler.HandleAccess(httpsv, e);
                } catch (Exception ex) {
                    var output = $"Error reading file: {ex}";
                    res.StatusCode = (int)HttpStatusCode.InternalServerError;
                    res.WriteContent(Encoding.UTF8.GetBytes(output));
                }
                return;
            }

            var content = GetFile(path);

            if (content == null)
            {
                res.StatusCode = (int)HttpStatusCode.NotFound;
                const string res404 = "File not found";
                res.WriteContent(Encoding.UTF8.GetBytes(res404));
                return;
            }

            if (path.EndsWith(".html"))
            {
                res.ContentEncoding = Encoding.UTF8;
            }
            else if (path.EndsWith(".js"))
            {
                res.ContentEncoding = Encoding.UTF8;
            }

            res.ContentType = MimeTypes.GetMimeType(Path.GetExtension(path));

            res.WriteContent(content);
        }
        private void Server_RequestReceived(object sender, HttpRequestEventArgs e)
        {
            WriteLine($"Raw URL: {e.Request.RawUrl}");
            WriteLine($"URL: {e.Request.Url}");
            WriteLine($"Path: {e.Request.Path}");

            string ErrorMessage  = "";
            string DirectoryName = e.Request.Directory();
            string FileName      = e.Request.FileName();
            string Path          = e.Request.Path;

            string [] splitPath = Path.Split('/');

            if (!Directory.Exists(ServerDirectory))
            {
                ErrorMessage = "<H2>Error!! Requested Directory does not exists</H2><Br>";
                WriteLine("HTTP folder not found: " + ServerDirectory + DirectoryName);

                BuildHeader(e, 404, "404 Not Found");

                e.Response.OutputStream.WriteString(ErrorMessage);
                return;
            }

            if (e.Request.Path.EndsWith("/"))
            {
                // we need to find the default file

                FileName = DefaultFileName( );
            }

            MemoryStream virtualFileStream = null;

            DynamicFileRequestedEventArgs fe = new DynamicFileRequestedEventArgs(e);

            if (DynamicFileRequestedEvent != null)
            {
                virtualFileStream = DynamicFileRequestedEvent(this, fe);
            }

            if (virtualFileStream != null)
            {
                // send virtual file
                e.Response.ContentType
                    = mimeTypeMappings.TryGetValue(
                          System.IO.Path.GetExtension(fe.FileName), out string mime)
                        ? mime : "application/octet-stream";

                e.Response.CacheControl = "no-cache";

                virtualFileStream.CopyTo(e.Response.OutputStream);

                return;
            }


            string filePath =
                DirectoryName == "/" ? System.IO.Path.Combine(ServerDirectory, FileName) :
                System.IO.Path.Combine(ServerDirectory, DirectoryName, FileName);

            if (FileName.EndsWith(".py"))
            {
                ScriptProcessor.ProcessScriptFile(filePath, e);
                return;
            }
            else
            {
                // look for a static file


                if (File.Exists(filePath))
                {
                    try
                    {
                        // set mime type

                        e.Response.ContentType
                            = mimeTypeMappings.TryGetValue(
                                  System.IO.Path.GetExtension(FileName), out string mime)
                                ? mime : "application/octet-stream";

                        if (mime.Contains("image") || mime.Contains("javascript") || mime.Contains("css"))
                        {
                            // allow images, css and javascript to cache
                            e.Response.CacheControl = "max-age=36000";
                        }
                        else
                        {
                            e.Response.CacheControl = "no-cache";
                        }

                        Stream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);

                        fs.CopyTo(e.Response.OutputStream);

                        fs.Close( );
                        return;
                    }
                    catch
                    {
                    }
                }
                else
                {
                    // return 404
                    ErrorMessage = "<H2>404 Error! File Does Not Exist...</H2>";
                    BuildHeader(e, 404, "404 Not Found");
                    e.Response.OutputStream.WriteString(ErrorMessage);
                }
            }
        }
Example #32
0
        private void HttpServerRequest(object sender, HttpRequestEventArgs e)
        {
            // Get request
            var request = e.Request;

            // Get responce
            var response = e.Response;

            // Split our url to parts
            string[] pathParts = request.RawUrl.Trim().Split('/');

            if (pathParts.Length > 1 && string.IsNullOrEmpty(pathParts[1]))
            {
                if (!httpRequestHandlers.ContainsKey("home"))
                {
                    if (httpRequestHandlers.ContainsKey("404"))
                    {
                        httpRequestHandlers["404"].Invoke(request, response);
                    }
                    else
                    {
                        byte[] contents = Encoding.UTF8.GetBytes(pageNotFoundHtml);

                        response.ContentType     = "text/html";
                        response.ContentEncoding = Encoding.UTF8;
                        response.ContentLength64 = contents.LongLength;
                        response.Close(contents, true);
                    }
                }
                else
                {
                    httpRequestHandlers["home"].Invoke(request, response);
                }
            }
            else
            {
                // Crear all spaces from path
                string cleanedPath = string.Join("/", pathParts.Where(s => !string.IsNullOrEmpty(s)).ToArray());

                // Find question mark
                int indexOfQuestionMark = cleanedPath.IndexOf('?');

                // If question markis found
                if (indexOfQuestionMark >= 0)
                {
                    // Get path without question mark
                    cleanedPath = cleanedPath.Substring(0, indexOfQuestionMark);
                }

                // If path contains
                if (cleanedPath.EndsWith("/"))
                {
                    // Remove it
                    cleanedPath = cleanedPath.Substring(0, cleanedPath.Length - 1);
                }

                if (!httpRequestHandlers.ContainsKey(cleanedPath))
                {
                    if (request.HttpMethod.ToLower() == "get")
                    {
                        if (httpRequestHandlers.ContainsKey("404"))
                        {
                            httpRequestHandlers["404"].Invoke(request, response);
                        }
                        else
                        {
                            byte[] contents = Encoding.UTF8.GetBytes(pageNotFoundHtml);

                            response.ContentType     = "text/html";
                            response.ContentEncoding = Encoding.UTF8;
                            response.ContentLength64 = contents.LongLength;
                            response.Close(contents, true);
                        }
                    }
                    else
                    {
                        response.StatusCode = (int)HttpStatusCode.NotFound;
                        response.Close();
                    }
                }
                else
                {
                    httpRequestHandlers[cleanedPath].Invoke(request, response);
                }
            }
        }
Example #33
0
        private static void ProceedPrintRequest(HttpRequestEventArgs e)
        {
            var printer      = e.Request.QueryString.Get("printer");
            var documentName = e.Request.QueryString.Get("title");

            bool printerInstalled = false;

            // check if user specified printer

            if (printer == null)
            {
                Utility.ResponseWrite(e.Response, "Printer not specified");
                e.Response.ContentType = "text/plain";
                e.Response.StatusCode  = 400;
                return;
            }

            // check if printer installed

            foreach (string installedPrinter in PrinterSettings.InstalledPrinters)
            {
                if (installedPrinter == printer)
                {
                    printerInstalled = true;
                    break;
                }
            }

            if (!printerInstalled)
            {
                Utility.ResponseWrite(e.Response, "Printer not installed: " + printer);
                e.Response.ContentType = "text/plain";
                e.Response.StatusCode  = 400;
                return;
            }

            // perform printing

            bool opened = myPrinter.OpenPrint(printer, documentName != null ? documentName : "Receipt");

            // check if printer has opened for printing

            if (!opened)
            {
                ServerController.LogWarn("Can not open printer [" + printer + "]. Print failed.");
                Utility.ResponseWrite(e.Response, "Can not open printer [" + printer + "]. Print failed.");
                e.Response.ContentType = "text/plain";
                e.Response.StatusCode  = 500;
                return;
            }

            if (!e.Request.HasEntityBody)
            {
                Utility.ResponseWrite(e.Response, "Invalid raw printing data.");
                e.Response.ContentType = "text/plain";
                e.Response.StatusCode  = 400;
                return;
            }


            // get data and send to printer. then close print job

            byte[] data = Utility.GetRequestPostDataAsBytes(e.Request);
            myPrinter.SendToPrinter(printer, data, data.Length);
            myPrinter.ClosePrint();


            // response with success

            Utility.ResponseWrite(e.Response, "Print job has been sent to printer successfully!");
            e.Response.ContentType = "text/plain";
            e.Response.StatusCode  = 200;
            e.Response.Close();

            return;
        }
Example #34
0
 private void HttpServer_OnPost(object sender, HttpRequestEventArgs e)
 {
     HttpServerRequest(sender, e);
 }
Example #35
0
	public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath)
	{
		var request = args.Request;
		var response = args.Response;

		// Check feature
		if (!AuraData.FeaturesDb.IsEnabled("GuildListBoard"))
		{
			var sbe = new StringBuilder();
			using (var sw = new StringWriter(sbe))
			using (var writer = new XmlTextWriter(sw))
			{
				writer.Formatting = Formatting.Indented;

				writer.WriteStartDocument();
				writer.WriteStartElement("Guildlist");
				writer.WriteAttributeString("RowCount", "0");
				writer.WriteAttributeString("NowPage", "1");
				writer.WriteEndElement();
				writer.WriteEndDocument();
			}

			response.Send(sbe.ToString());
			return;
		}

		//var characterIdStr = request.Parameter("CharacterId");
		var serverName = request.Parameter("Name_Server");
		var pageStr = request.Parameter("Page");
		var sortByStr = request.Parameter("SortField");
		var sortTypeStr = request.Parameter("SortType");
		var guildLevelStr = request.Parameter("GuildLevelIndex");
		var memberAmountStr = request.Parameter("GuildMemberIndex");
		var guildTypeStr = request.Parameter("GuildType");
		var searchText = request.Parameter("SearchWord");
		//var passport = request.Parameter("Passport");

		// Check parameters
		if (serverName == null || pageStr == null || sortByStr == null || sortTypeStr == null || guildLevelStr == null || memberAmountStr == null || guildTypeStr == null || searchText == null)
		{
			response.Send("Invalid parameter (1).");
			return;
		}

		int page;
		GuildSortBy sortBy;
		GuildSortType sortType;
		GuildSearchLevel guildLevel;
		GuildSearchMembers memberAmount;
		GuildType guildType;

		if (!int.TryParse(pageStr, out page)
			|| !Enum.TryParse<GuildSortBy>(sortByStr, out sortBy)
			|| !Enum.TryParse<GuildSortType>(sortTypeStr, out sortType)
			|| !Enum.TryParse<GuildSearchLevel>(guildLevelStr, out guildLevel)
			|| !Enum.TryParse<GuildSearchMembers>(memberAmountStr, out memberAmount)
			|| !Enum.TryParse<GuildType>(guildTypeStr, out guildType))
		{
			response.Send("Invalid parameter (2).");
			return;
		}

		var perPage = 10; // Client limit
		if (page < 1)
			page = 1;

		var allGuilds = WebServer.Instance.Database.GetGuildList(serverName, sortBy, sortType, guildLevel, memberAmount, guildType, searchText);
		var guilds = allGuilds.Skip((page - 1) * perPage).Take(perPage);

		var sb = new StringBuilder();
		using (var sw = new StringWriter(sb))
		using (var writer = new XmlTextWriter(sw))
		{
			writer.Formatting = Formatting.Indented;

			writer.WriteStartDocument();
			writer.WriteStartElement("Guildlist");
			writer.WriteAttributeString("RowCount", allGuilds.Count.ToString());
			writer.WriteAttributeString("NowPage", page.ToString());
			foreach (var guild in guilds)
			{
				writer.WriteStartElement("Guild");
				writer.WriteAttributeString("guildid", guild.Id.ToString());
				writer.WriteAttributeString("levelindex", guild.LevelIndex.ToString());
				writer.WriteAttributeString("membercnt", guild.MemberCount.ToString());
				writer.WriteAttributeString("guildname", guild.Name);
				writer.WriteAttributeString("guildtype", ((int)guild.Type).ToString());
				writer.WriteAttributeString("mastername", guild.LeaderName);
				writer.WriteEndElement();
			}
			writer.WriteEndElement();
			writer.WriteEndDocument();
		}

		response.Send(sb.ToString());
	}
Example #36
0
        private void DumpConnectedInfo(string requestId, HttpRequestEventArgs e)
        {
            _log.Debug("{0} Connected", requestId);

            var user = e.RequestContext.User;
            if (user != null)
            {
                _log.Debug("{0} identity info: Name = {1}, Is Authenticated = {2}, Authentication Type = {3}",
                    requestId,
                    e.RequestContext.User.Identity.Name,
                    e.RequestContext.User.Identity.IsAuthenticated,
                    e.RequestContext.User.Identity.AuthenticationType);
            }

            _log.Debug("{0} request info: Agent = {1}, Host Address = {2}, Host Name = {3}",
                requestId,
                e.RequestContext.Request.UserAgent,
                e.RequestContext.Request.UserHostAddress,
                e.RequestContext.Request.UserHostName);
        }
Example #37
0
        private void HandleAuthorize(RequestMethod method, HttpRequestEventArgs args, Authentication auth)
        {
            //Register the action
            auth.RecordAction("auth:authorize");

            //Make sure its a valid method
            if (method != RequestMethod.Get)
            {
                args.Response.StatusCode = (int)HttpStatusCode.MethodNotAllowed;
                args.Response.Close();
                return;
            }

            //Only users may use this endpoing
            if (!auth.IsUser)
            {
                args.Response.StatusCode = (int)HttpStatusCode.Forbidden;
                args.Response.Close();
                return;
            }

            //Prepare the query params
            Query      query = new Query(args.Request);
            string     clientID, redirectURL, responseType, state;
            BotAccount botAccount = null;

            //Get the state
            state = query.GetString("state", "");

            //Validate the clientID
            if (!query.TryGetString("client_id", out clientID) || !API.ScanBotAccounts(clientID, out botAccount))
            {
                args.Response.StatusCode = (int)HttpStatusCode.Forbidden;
                args.Response.WriteText("Invalid client_id. Please do not ever use this service again, it maybe trying to steal your credentials!");
                return;
            }

            //Validate the redirect
            if (!query.TryGetString("redirect_uri", out redirectURL) || !redirectURL.Equals(botAccount.AuthRedirect))
            {
                args.Response.StatusCode = (int)HttpStatusCode.Forbidden;
                args.Response.WriteText("redirect_uri not supplied from auth application or does not match bot account.");
                return;
            }

            //Validate the response tpye
            if (!query.TryGetString("response_type", out responseType) || !(responseType == "code" || responseType == "token"))
            {
                args.Response.StatusCode = (int)HttpStatusCode.Forbidden;
                args.Response.WriteText("response_type not supplied from auth application or is invalid.");
                return;
            }

            //If its a token lets return the token asap
            if (responseType == "token")
            {
                //Only admin bots can get tokens
                if (!botAccount.IsAdmin)
                {
                    args.Response.StatusCode = (int)HttpStatusCode.Forbidden;
                    args.Response.WriteText("response_type not supplied from auth application or is invalid.");
                    return;
                }

                //Generate some values
                auth.Token = GenerateToken(TimeSpan.FromHours(1), auth.Name);

                //Return with the token
                Redirect(args, $"{redirectURL}?access_token={auth.Token.Value.AccessToken}&expires_in={auth.Token.Value.Expiry.ToUnixEpoch()}&state={state}");
                return;
            }

            //Its a simple code one.
            if (responseType == "code")
            {
                //Generate some values;
                string code = GenerateRandomString(RNG, 16);
                auth.Token = GenerateToken(TimeSpan.FromHours(24), auth.Name);

                //Add to the list
                lock (_pendingTokenLock) _pendingTokens.Add(code, auth.Token.Value);

                //Redirect
                Redirect(args, $"{redirectURL}?code={code}&state={state}");
                return;
            }
        }
Example #38
0
        private void Httpsv_OnGet(object sender, HttpRequestEventArgs e)
        {
            var     req    = e.Request;
            var     res    = e.Response;
            string  rawUrl = req.RawUrl;
            MAction emm    = new MAction();

            if (Path.GetExtension(req.RawUrl).Length > 0)
            {
                string path        = AppDomain.CurrentDomain.BaseDirectory + req.RawUrl;
                string contentType = MimeMapping.GetMimeMapping(path);
                byte[] buffer      = File.ReadAllBytes(path);
                res.ContentType = contentType;
                res.WriteContent(buffer);
            }
            else
            {
                int index = rawUrl.IndexOf('?');
                if (index > 0)
                {
                    rawUrl = rawUrl.Substring(0, index);
                }
                string result = string.Empty;
                try
                {
                    if (dic.ContainsKey(rawUrl))
                    {
                        emm = dic[rawUrl];
                        var      action = container.Resolve(emm.controllerType);
                        object[] objs   = new object[emm.parameterInfo.Length];
                        int      i      = 0;
                        foreach (var item in emm.parameterInfo)
                        {
                            if (item.ParameterType == typeof(int))
                            {
                                objs[i] = int.Parse(e.Request.QueryString.Get(item.Name));
                            }
                            else
                            {
                                objs[i] = e.Request.QueryString.Get(item.Name);
                            }
                            i = i + 1;
                        }
                        var data = emm.action.Invoke(action, objs);
                        e.Response.ContentType = "application/json";
                        if (data == null)
                        {
                            e.Response.StatusCode = 204;
                        }
                        else
                        {
                            byte[] buffer = Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(data));
                            e.Response.WriteContent(buffer);
                        }
                    }
                    else
                    {
                        e.Response.StatusCode = 404;
                    }
                }
                catch (Exception ex)
                {
                    if (emm.exceptionFilter == null)
                    {
                        byte[] buffer = Encoding.UTF8.GetBytes(ex.Message + ex.StackTrace);
                        e.Response.WriteContent(buffer);
                        e.Response.StatusCode = 500;
                    }
                    else
                    {
                        if (emm.exceptionFilter != null)
                        {
                            if (ex.InnerException != null)
                            {
                                emm.exceptionFilter.OnException(ex.InnerException, e);
                            }
                            else
                            {
                                emm.exceptionFilter.OnException(ex, e);
                            }
                        }
                    }
                }
            }
        }
Example #39
0
        public void recvRequest(object sender, HttpRequestEventArgs e)
        {
            using (var writer = new StreamWriter(e.Response.OutputStream))
            {
                HttpRequest request = e.Request;
                // Obtain a response object.
                HttpResponse response = e.Response;
                // Construct a response.
                System.Collections.Specialized.NameValueCollection headers = request.Headers;
                Console.WriteLine("Got Request: " + request.HttpMethod + " " + request.Url.AbsoluteUri.ToString() + "!");

                if (request.HttpMethod.ToLower().Equals("head") || request.HttpMethod.ToLower().Equals("get") || request.HttpMethod.ToLower().Equals("post") || request.HttpMethod.ToLower().Equals("options") || request.HttpMethod.ToLower().Equals("put"))
                {
                    if (request.Url.AbsoluteUri.ToString().Contains("localhost/GETHASHES"))
                    {
                        Console.WriteLine("Sending 401...");
                        if (headers["Authorization"] == null && workingUri == null)
                        {
                            Console.WriteLine("Got request for hashes...");
                            response.Headers.Add("WWW-Authenticate", "NTLM");
                            response.StatusCode = 401;
                            state = 0;
                        }

                        else
                        {
                            String authHeader = headers["Authorization"];
                            byte[] ntlmBlock  = getNtlmBlock(authHeader);
                            if (ntlmBlock != null && (workingUri == null || workingUri == request.Url.AbsoluteUri.ToString()))
                            {
                                workingUri = request.Url.AbsoluteUri.ToString();
                                if (state == 0)
                                {
                                    Console.WriteLine("Parsing initial NTLM auth...\n" + authHeader);
                                    smbRelayThread = new Thread(() => smbRelay.startSMBRelay(ntlmQueue, this.cmd));
                                    smbRelayThread.Start();
                                    ntlmQueue.Enqueue(ntlmBlock);
                                    byte[] challenge = null;
                                    Config.signalHandlerClient.WaitOne();
                                    challenge = ntlmQueue.Dequeue();
                                    Console.WriteLine("Got SMB challenge " + Convert.ToBase64String(challenge));
                                    if (challenge != null)
                                    {
                                        response.Headers.Add("WWW-Authenticate", "NTLM " + Convert.ToBase64String(challenge));
                                        state = state + 1;
                                        response.StatusCode = 401;
                                    }
                                }
                                else if (state == 1 && request.Url.AbsoluteUri.ToString().Equals(workingUri))
                                {
                                    Console.WriteLine("Parsing final auth...");
                                    if (ntlmBlock[8] == 3)
                                    {
                                        Console.WriteLine(Convert.ToBase64String(ntlmBlock));
                                    }
                                    ntlmQueue.Enqueue(ntlmBlock);
                                    Config.signalHandler.Set();
                                    response.StatusCode = 200;
                                    state = state + 1;
                                    Config.signalHandlerClient.WaitOne();
                                    byte[] checkStatus = ntlmQueue.Dequeue();
                                    if (checkStatus[0] == 99)
                                    {
                                        writer.Close();
                                        smbRelayThread.Abort();
                                        finished.Set();
                                        return;
                                    }
                                    else
                                    {
                                        workingUri = null;
                                    }
                                }
                            }
                        }
                        writer.Close();
                        return;
                    }
                    else if (request.Url.AbsoluteUri.ToString().Equals("http://127.0.0.1/wpad.dat") || request.Url.AbsoluteUri.ToString().Equals("http://wpad/wpad.dat"))
                    {
                        Console.WriteLine("Spoofing wpad...");
                        response.StatusCode = 200;
                        String responseTxt = "function FindProxyForURL(url,host){if (dnsDomainIs(host, \"localhost\")) return \"DIRECT\";";
                        for (int i = 0; i < wpad_exclude.Length; i++)
                        {
                            responseTxt = responseTxt + "if (dnsDomainIs(host, \"" + wpad_exclude[i] + "\")) return \"DIRECT\";";
                        }
                        responseTxt = responseTxt + "return \"PROXY 127.0.0.1:80\";}";
                        writer.Write(responseTxt);
                    }
                    else if (workingUri == null && !request.Url.AbsoluteUri.ToString().Contains("wpad") && !request.Url.AbsoluteUri.ToString().Contains("favicon"))
                    {
                        Random rnd  = new Random();
                        int    sess = rnd.Next(1, 1000000);
                        response.Headers.Add("Location", "http://localhost/GETHASHES" + sess);
                        Console.WriteLine("Redirecting to target.." + response.Headers["Location"]);
                        response.StatusCode = 302;
                        writer.Close();
                    }
                }
                else if (request.HttpMethod.ToLower().Equals("propfind"))
                {
                    if (request.Url.AbsoluteUri.ToString().Equals("http://localhost/test"))
                    {
                        Console.WriteLine("Got PROPFIND for /test... Responding");
                        response.StatusCode  = 207;
                        response.ContentType = "application/xml";
                        writer.Write("<?xml version='1.0' encoding='UTF-8'?><ns0:multistatus xmlns:ns0=\"DAV:\"><ns0:response><ns0:href>/test/</ns0:href><ns0:propstat><ns0:prop><ns0:resourcetype><ns0:collection /></ns0:resourcetype><ns0:creationdate>2015-08-03T14:53:38Z</ns0:creationdate><ns0:getlastmodified>Tue, 11 Aug 2015 15:48:25 GMT</ns0:getlastmodified><ns0:displayname>test</ns0:displayname><ns0:lockdiscovery /><ns0:supportedlock><ns0:lockentry><ns0:lockscope><ns0:exclusive /></ns0:lockscope><ns0:locktype><ns0:write /></ns0:locktype></ns0:lockentry><ns0:lockentry><ns0:lockscope><ns0:shared /></ns0:lockscope><ns0:locktype><ns0:write /></ns0:locktype></ns0:lockentry></ns0:supportedlock></ns0:prop><ns0:status>HTTP/1.1 200 OK</ns0:status></ns0:propstat></ns0:response></ns0:multistatus>");
                        writer.Close();
                    }
                    else
                    {
                        Console.WriteLine("Got PROPFIND for " + request.Url.AbsoluteUri.ToString() + " returning 404");
                        response.StatusCode = 404;
                        writer.Close();
                    }
                }
                else
                {
                    Console.WriteLine("Got " + request.HttpMethod + " for " + request.Url.AbsoluteUri.ToString() + " replying 404");
                    response.StatusCode = 404;
                    writer.Close();
                }
            }
        }
Example #40
0
        private void Httpsv_OnPost(object sender, HttpRequestEventArgs e)
        {
            MAction emm       = new MAction();
            string  logResult = string.Empty;

            try
            {
                byte[] bf     = new byte[e.Request.ContentLength64];
                string result = Encoding.UTF8.GetString(GetResult(e, bf));   //获取http请求内容
                logResult = result;
                if (dic.ContainsKey(e.Request.RawUrl))
                {
                    emm = dic[e.Request.RawUrl];
                    object   obj;
                    object[] objs = new object[emm.parameterInfo.Length];
                    if (emm.parameterInfo.Length > 1)
                    {
                        throw new Exception("POST方法只允许有一个参数");
                    }
                    else if (emm.parameterInfo.Length == 0)
                    {
                        obj = new object();
                    }
                    else
                    {
                        obj     = Newtonsoft.Json.JsonConvert.DeserializeObject(result, emm.parameterInfo[0].ParameterType);
                        objs[0] = obj;
                    }
                    var action = container.Resolve(emm.controllerType);
                    var data   = emm.action.Invoke(action, objs);
                    e.Response.ContentType = "application/json";
                    if (data == null)
                    {
                        e.Response.StatusCode = 204;
                    }
                    else
                    {
                        byte[] buffer = Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(data));
                        e.Response.WriteContent(buffer);
                    }
                }
                else
                {
                    e.Response.StatusCode = 404;
                }
            }
            catch (Exception ex)
            {
                if (emm.exceptionFilter == null)
                {
                    byte[] buffer = Encoding.UTF8.GetBytes(ex.Message + ex.StackTrace);
                    e.Response.WriteContent(buffer);
                    e.Response.StatusCode = 500;
                }
                else
                {
                    if (emm.exceptionFilter != null)
                    {
                        if (ex.InnerException != null)
                        {
                            emm.exceptionFilter.OnException(ex.InnerException, e);
                        }
                        else
                        {
                            emm.exceptionFilter.OnException(ex, e);
                        }
                    }
                }
            }
        }
Example #41
0
        private void Server_HandleRequest(object sender, HttpRequestEventArgs e)
        {
            var user = (RemoteCommUserPrincipal)e.Request.User;

            e.Response.Charset = Encoding.UTF8;
            var statusCode = HttpStatusCode.NotImplemented;
            IEnumerable <char> statusDescription = null;

            var urlParts = e.Request
                           .Address
                           .AbsolutePath
                           .Split('/')
                           .Select(p => p.ToLower().Trim())
                           .ToArray();

            if ((urlParts.Length == 3) ||
                (urlParts.Length == 4 && urlParts[3] == string.Empty))
            {
                switch (urlParts[1])    // action
                {
                case "exec":
                    switch (e.Request.TryGetKnownMethod())
                    {
                    case HttpMethod.POST:
                    {
                        // create dictionary from UTF-8 JSON string in body
                        var @params = this._SERIALIZER
                                      .FromJson <IDictionary <string, object> >(Encoding.UTF8
                                                                                .GetString(e.Request.GetBodyData()));

                        var funcNameOrId = urlParts[2];
                        if (!string.IsNullOrWhiteSpace(funcNameOrId))
                        {
                            var       locator = ServiceLocator.Current.GetInstance <IFunctionLocator>();
                            IFunction func;

                            Guid id;
                            if (Guid.TryParse(funcNameOrId, out id))
                            {
                                // try find by ID
                                func = CollectionHelper.SingleOrDefault(locator.GetAllFunctions(),
                                                                        f => f.Id == id);
                            }
                            else
                            {
                                // try find by full name
                                func = CollectionHelper.SingleOrDefault(locator.GetAllFunctions(),
                                                                        f => funcNameOrId == (f.FullName ?? string.Empty).ToLower().Trim());
                            }

                            if (func != null)
                            {
                                if (this.IsFunctionAllowed(func, user))
                                {
                                    IFunctionExecutionContext execCtx;
                                    if (@params != null)
                                    {
                                        execCtx = func.Execute(parameters: @params,
                                                               autoStart: true);
                                    }
                                    else
                                    {
                                        execCtx = func.Execute(autoStart: true);
                                    }

                                    if (execCtx.Errors != null &&
                                        execCtx.Errors.Count > 0)
                                    {
                                        // raise 500 error
                                        throw new AggregateException(execCtx.Errors);
                                    }

                                    var result = new
                                    {
                                        code    = execCtx.ResultCode,
                                        msg     = string.IsNullOrWhiteSpace(execCtx.ResultMessage) ? null : execCtx.ResultMessage.Trim(),
                                        @params = execCtx.ResultParameters,
                                    };

                                    e.Response.ContentType = "application/json";
                                    e.Response.Write(chars: this._SERIALIZER
                                                     .ToJson(result));

                                    statusCode = HttpStatusCode.OK;
                                }
                                else
                                {
                                    e.Response.IsForbidden = true;
                                }
                            }
                            else
                            {
                                e.Response.DocumentNotFound = true;
                            }
                        }
                        else
                        {
                            statusCode        = HttpStatusCode.BadRequest;
                            statusDescription = "Invalid function name or ID";
                        }
                    }
                    break;

                    default:
                        // invalid HTTP method
                        statusCode = HttpStatusCode.MethodNotAllowed;
                        break;
                    }
                    break;

                default:
                    // unknown action
                    statusCode        = HttpStatusCode.BadRequest;
                    statusDescription = "Unknown action";
                    break;
                }
            }
            else
            {
                statusCode        = HttpStatusCode.BadRequest;
                statusDescription = "Invalid request URI";
            }

            e.Response.StatusCode        = statusCode;
            e.Response.StatusDescription = statusDescription.AsString();
        }
Example #42
0
    public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath)
    {
        var request  = args.Request;
        var response = args.Response;

        // Check feature
        if (!AuraData.FeaturesDb.IsEnabled("GuildListBoard"))
        {
            var sbe = new StringBuilder();
            using (var sw = new StringWriter(sbe))
                using (var writer = new XmlTextWriter(sw))
                {
                    writer.Formatting = Formatting.Indented;

                    writer.WriteStartDocument();
                    writer.WriteStartElement("Guildlist");
                    writer.WriteAttributeString("RowCount", "0");
                    writer.WriteAttributeString("NowPage", "1");
                    writer.WriteEndElement();
                    writer.WriteEndDocument();
                }

            response.Send(sbe.ToString());
            return;
        }

        //var characterIdStr = request.Parameter("CharacterId");
        var serverName      = request.Parameter("Name_Server");
        var pageStr         = request.Parameter("Page");
        var sortByStr       = request.Parameter("SortField");
        var sortTypeStr     = request.Parameter("SortType");
        var guildLevelStr   = request.Parameter("GuildLevelIndex");
        var memberAmountStr = request.Parameter("GuildMemberIndex");
        var guildTypeStr    = request.Parameter("GuildType");
        var searchText      = request.Parameter("SearchWord");

        //var passport = request.Parameter("Passport");

        // Check parameters
        if (serverName == null || pageStr == null || sortByStr == null || sortTypeStr == null || guildLevelStr == null || memberAmountStr == null || guildTypeStr == null || searchText == null)
        {
            response.Send("Invalid parameter (1).");
            return;
        }

        int                page;
        GuildSortBy        sortBy;
        GuildSortType      sortType;
        GuildSearchLevel   guildLevel;
        GuildSearchMembers memberAmount;
        GuildType          guildType;

        if (!int.TryParse(pageStr, out page) ||
            !Enum.TryParse <GuildSortBy>(sortByStr, out sortBy) ||
            !Enum.TryParse <GuildSortType>(sortTypeStr, out sortType) ||
            !Enum.TryParse <GuildSearchLevel>(guildLevelStr, out guildLevel) ||
            !Enum.TryParse <GuildSearchMembers>(memberAmountStr, out memberAmount) ||
            !Enum.TryParse <GuildType>(guildTypeStr, out guildType))
        {
            response.Send("Invalid parameter (2).");
            return;
        }

        var perPage = 10;         // Client limit

        if (page < 1)
        {
            page = 1;
        }

        var allGuilds = WebServer.Instance.Database.GetGuildList(serverName, sortBy, sortType, guildLevel, memberAmount, guildType, searchText);
        var guilds    = allGuilds.Skip((page - 1) * perPage).Take(perPage);

        var sb = new StringBuilder();

        using (var sw = new StringWriter(sb))
            using (var writer = new XmlTextWriter(sw))
            {
                writer.Formatting = Formatting.Indented;

                writer.WriteStartDocument();
                writer.WriteStartElement("Guildlist");
                writer.WriteAttributeString("RowCount", allGuilds.Count.ToString());
                writer.WriteAttributeString("NowPage", page.ToString());
                foreach (var guild in guilds)
                {
                    writer.WriteStartElement("Guild");
                    writer.WriteAttributeString("guildid", guild.Id.ToString());
                    writer.WriteAttributeString("levelindex", guild.LevelIndex.ToString());
                    writer.WriteAttributeString("membercnt", guild.MemberCount.ToString());
                    writer.WriteAttributeString("guildname", guild.Name);
                    writer.WriteAttributeString("guildtype", ((int)guild.Type).ToString());
                    writer.WriteAttributeString("mastername", guild.LeaderName);
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
                writer.WriteEndDocument();
            }

        response.Send(sb.ToString());
    }
Example #43
0
        public void Process(HttpListenerContext context, string baseFolderPath, string[] httpMethods)
        {
            HttpListenerRequest  request  = context.Request;
            HttpListenerResponse response = context.Response;
            string httpMethod             = request.HttpMethod.ToLower();
            string httpPath    = request.RawUrl.Split('?')[0];
            string foundMethod = Array.Find(httpMethods, method => method == httpMethod);

            if (foundMethod != null)
            {
                if (httpPath == "/")
                {
                    string indexPath = Path.Combine(baseFolderPath, "index.html");
                    if (File.Exists(indexPath))
                    {
                        string bufferStr = File.ReadAllText(indexPath);
                        byte[] buffer    = Encoding.UTF8.GetBytes(bufferStr);
                        response.ContentLength64 = buffer.Length;
                        Stream output = response.OutputStream;
                        output.Write(buffer, 0, buffer.Length);
                        output.Close();
                        response.Close();
                    }
                }
                else
                {
                    httpPath = httpPath.Substring(1).Replace("/", @"\");
                    string filePath    = Path.Combine(baseFolderPath, httpPath);
                    string contentType = "";
                    if (File.Exists(filePath))
                    {
                        string ext = Path.GetExtension(filePath).TrimStart(".".ToCharArray());
                        if (_helpers.MimeTypes.ContainsKey(ext))
                        {
                            contentType = _helpers.MimeTypes[ext];
                        }
                        else
                        {
                            contentType = GetContentType(ext);
                        }
                        byte[] buffer = File.ReadAllBytes(filePath);
                        response.ContentLength64 = buffer.Length;
                        response.ContentType     = contentType;
                        Stream output = response.OutputStream;
                        output.Write(buffer, 0, buffer.Length);
                        output.Close();
                        response.Close();
                    }
                    else
                    {
                        HttpConnectionDetails details = new HttpConnectionDetails(
                            response,
                            httpPath,
                            httpMethod,
                            request.ContentLength64,
                            request.ContentType);
                        StreamReader reader = new StreamReader(request.InputStream, request.ContentEncoding);
                        string       body   = reader.ReadToEnd();
                        request.InputStream.Close();
                        reader.Close();
                        HttpRequestEventArgs args = new HttpRequestEventArgs(body, details);
                        _onHttpRequestChanged(this, args);
                    }
                }
            }
        }
Example #44
0
	public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath)
	{
		var request = args.Request;
		var response = args.Response;
		var server = args.Context.Server;

		var guildIdStr = request.Parameter("guildid");
		var accountName = request.Parameter("userid");
		var serverName = request.Parameter("userserver");
		var characterIdStr = request.Parameter("userchar");
		var sessionKeyStr = request.Parameter("key");

		// Check parameters
		if (guildIdStr == null || accountName == null || serverName == null || characterIdStr == null || sessionKeyStr == null)
		{
			response.Send("Invalid parameter (1).");
			return;
		}

		if (!_number.IsMatch(guildIdStr) || !_number.IsMatch(characterIdStr) || !_number.IsMatch(sessionKeyStr))
		{
			response.Send("Invalid parameter (2).");
			return;
		}

		var guildId = Convert.ToInt64(guildIdStr);
		var characterId = Convert.ToInt64(characterIdStr);
		var sessionKey = Convert.ToInt64(sessionKeyStr);

		// Check session
		if (!WebServer.Instance.Database.CheckSession(accountName, sessionKey))
		{
			response.Send("Please log in first.");
			return;
		}

		// Check character
		if (!WebServer.Instance.Database.AccountHasCharacter(accountName, characterId, serverName))
		{
			response.Send("Invalid character.");
			return;
		}

		// Check guild
		var guild = WebServer.Instance.Database.GetGuild(guildId);
		if (guild == null)
		{
			response.Send("Guild not found.");
			return;
		}

		// Check member
		var guildMember = guild.GetMember(characterId);
		if (guildMember == null)
		{
			response.Send("You're not a member of this guild.");
			return;
		}

		// Determine ability to level up
		var levelUpDisabled = true;
		var levelUpRequirements = "";
		if (guild.Level < GuildLevel.Grand)
		{
			int points, gold;
			if (guild.GetLevelUpRequirements(out points, out gold) && points < guild.Points && gold < guild.Gold)
				levelUpDisabled = false;

			levelUpRequirements = string.Format("Guild Points: {0:n0}, Gold: {1:n0}", points, gold);
		}

		string success = null;
		string error = null;

		// Leader actions
		if (guildMember.IsLeader)
		{
			// Settings: Change messages
			if (request.Parameter("intro") != null)
				this.ChangeMessages(request, guild, ref success, ref error);
			// Settings: Change leader
			else if (request.Parameter("leader") != null)
				this.ChangeLeader(request, guild, ref success, ref error);
			// Settings: Disband
			else if (request.Parameter("disband") != null)
				this.Disband(request, guild, ref success, ref error);
			// Settings: Level up
			else if (!levelUpDisabled && request.Parameter("levelUp") != null)
				this.LevelUp(request, guild, ref success, ref error);
		}

		// Leader/Officer actions
		if (guildMember.IsLeaderOrOfficer)
		{
			// Members: Accept application
			if (request.Parameter("acceptApplication") != null)
			{
				var id = Convert.ToInt64(request.Parameter("acceptApplication"));
				var member = guild.GetMember(id);
				if (member == null)
					error = "Applicant not found.";
				else
					this.AcceptApplication(request, guild, member, ref success, ref error);
			}
			// Members: Decline application
			else if (request.Parameter("declineApplication") != null)
			{
				var id = Convert.ToInt64(request.Parameter("declineApplication"));
				var member = guild.GetMember(id);
				if (member == null)
					error = "Applicant not found.";
				else
					this.DeclineApplication(request, guild, member, ref success, ref error);
			}
			// Members: Remove member
			else if (request.Parameter("removeMember") != null)
			{
				var memberId = Convert.ToInt64(request.Parameter("removeMember"));
				var member = guild.GetMember(memberId);
				if (member == null)
					error = "Character not found.";
				else
					this.RemoveMember(request, guild, member, ref success, ref error);
			}
		}

		// Applicant actions
		if (guildMember.IsApplicant)
		{
			// Menu: Cancel application
			if (request.Parameter("cancelApplication") != null)
				this.CancelApplication(request, guild, guildMember, ref success, ref error);
		}

		// Non-leader actions
		if (!guildMember.IsLeader)
		{
			// Menu: Leave guild
			if (request.Parameter("leaveGuild") != null)
				this.LeaveGuild(request, guild, guildMember, ref success, ref error);
		}

		// Get non-declined members, ordered by their rank and name, putting applicants after the leaders.
		var members = guild.GetMembers().Where(a => a.Rank != GuildMemberRank.Declined).OrderBy(a => a.Rank == GuildMemberRank.Applied ? 25 : (int)a.Rank * 10).ThenBy(a => a.Name);
		var url = string.Format("/guild_home.cs?guildid={0}&userid={1}&userserver={2}&userchar={3}&key={4}", guildIdStr, accountName, serverName, characterIdStr, sessionKeyStr);

		// Render
		var engine = server.GetEngine("hbs");
		response.Send(engine.RenderFile(server.GetLocalPath("templates/guild.htm"), new
		{
			url = url,
			guild = guild,
			members = members,
			member = guildMember,
			success = success,
			error = error,
			messageMaxLength = MessageMaxLength,
			levelUpDisabled = levelUpDisabled,
			levelUpRequirements = levelUpRequirements,
		}));
	}
Example #45
0
 public abstract void OnHttpGet(object sender, HttpRequestEventArgs e);
Example #46
0
 private static void PrintResults(HttpRequestEventArgs httpRequestEventArgs)
 {
 }
Example #47
0
        public void HandleAccess(HttpServer server, HttpRequestEventArgs e)
        {
            var req = e.Request;
            var res = e.Response;

            var upperPath = "";
            var path      = req.RawUrl.Split(new char[] { '?' }, 2)[0];
            var relPath   = path.Replace(BasePath, "").UrlDecode();
            var download  = req.QueryString["download"] != null;

            if (relPath.StartsWith("/"))
            {
                relPath = relPath.Substring(1);
            }

            if (relPath.Length > 0)
            {
                var tmp = !relPath.EndsWith("/") ? relPath + "/" : relPath;
                upperPath = Path.Combine(BasePath, Path.GetDirectoryName(Path.GetDirectoryName(tmp)));
            }

            var folder = Path.Combine(dataFolder, relPath);

            if (folder.Contains("../"))
            {
                folder.Replace("../", "");
            }
            if (File.Exists(folder))
            {
                if (folder.Contains(".dcs") && !download)
                {
                    // Assemble DCS Header table
                    List <DCSHeader> headers = DCSParser.parseDCS(folder);

                    string dcsList = "";

                    headers.ForEach(a => {
                        dcsList += String.Format(
                            "\t<tr>\n" +
                            "\t\t<th>{0}</th>\n" +
                            "\t\t<th>{1}</th>\n" +
                            "\t\t<th>{2}</th>\n" +
                            "\t\t<th>{3}</th>\n" +
                            "\t\t<th>{4}</th>\n" +
                            "\t\t<th>{5}</th>\n" +
                            "\t\t<th>{6}</th>\n" +
                            "\t\t<th>{7}</th>\n" +
                            "\t\t<th>{8}</th>\n" +
                            "\t</tr>\n",
                            a.Address,
                            a.DateTime.ToString(),
                            a.Status,
                            a.Signal,
                            a.FrequencyOffset,
                            a.ModIndexNormal,
                            a.DataQualNominal,
                            a.Channel,
                            a.SourceCode);
                    });

                    string listTable = "<table cellpadding=\"5\"cellspacing=\"0\">\n" +
                                       "\t<tr>\n" +
                                       "\t\t<th>Address</th>\n" +
                                       "\t\t<th>Date / Time</th>\n" +
                                       "\t\t<th>Status</th>\n" +
                                       "\t\t<th>Signal</th>\n" +
                                       "\t\t<th>Frequency Offset</th>\n" +
                                       "\t\t<th>MIN</th>\n" +
                                       "\t\t<th>DQN</th>\n" +
                                       "\t\t<th>Channel</th>\n" +
                                       "\t\t<th>Source Code</th>\n" +
                                       "\t</tr>\n" +
                                       "\t<tr><th colspan=\"9\"><hr></th></tr>\n" +
                                       "{0}\n" +
                                       "</table>\n";

                    listTable = string.Format(listTable, dcsList);

                    string output = string.Format(
                        "<html>\n" +
                        "\t<head>\n" +
                        "\t\t<title>OpenSatelliteProject - {0}</title>\n" +
                        "\t</head>\n" +
                        "\t<body>\n" +
                        "\t<h2>OpenSatelliteProject {0}</h2>\n" +
                        "\tDownload File: <a href=\"{2}\">{0}</a></BR>\n" +
                        "\t</BR>\n" +
                        "\t{1}\n" +
                        "\t</body>\n" +
                        "</html>", "/" + relPath.UrlDecode(), listTable, path + "?download=1");

                    res.StatusCode = (int)HttpStatusCode.OK;
                    res.WriteContent(Encoding.UTF8.GetBytes(output));
                }
                else
                {
                    // Handle File load
                    try {
                        res.ContentType = Presets.GetMimeType(Path.GetExtension(folder));
                        res.StatusCode  = (int)HttpStatusCode.OK;
                        res.SendChunked = true;
                        using (FileStream f = File.OpenRead(folder)) {
                            Stream o          = res.OutputStream;
                            byte[] buffer     = new byte[bufferSize];
                            long   totalBytes = f.Length;
                            long   readBytes  = 0;

                            while (readBytes < totalBytes)
                            {
                                int rb = f.Read(buffer, 0, bufferSize);
                                readBytes += rb;
                                o.Write(buffer, 0, rb);
                            }

                            o.Close();
                        }
                    } catch (Exception ex) {
                        string output = string.Format("Error reading file: {0}", ex);
                        res.StatusCode = (int)HttpStatusCode.InternalServerError;
                        res.WriteContent(Encoding.UTF8.GetBytes(output));
                    }
                }
            }
            else if (Directory.Exists(folder))
            {
                // Handle Directory Listing.
                List <string> files    = Directory.GetFiles(folder).Where(x => !x.EndsWith(".lrit")).OrderBy(a => a).ToList();
                List <string> dirs     = Directory.GetDirectories(folder).OrderBy(a => a).ToList();
                string        dirList  = "";
                string        fileList = "";

                if (upperPath.Length > 0)
                {
                    dirList += string.Format("\t<tr>\n" +
                                             "\t\t<td><img src=\"/static/folder.gif\"></td>\n" +
                                             "\t\t<td><a href=\"{0}\">{1}</a></td>\n" +
                                             "\t\t<td>{2}</td>\n" +
                                             "\t\t<td>{3}</td>\n" +
                                             "\t</tr>\n", upperPath, "..", "", "-");
                }

                foreach (var file in dirs)
                {
                    var name = Path.GetFileName(file);
                    var time = Directory.GetLastWriteTime(file);
                    var url  = Path.Combine(req.RawUrl, name.UrlEncode());
                    dirList += string.Format("\t<tr>\n" +
                                             "\t\t<td><img src=\"/static/folder.gif\"></td>\n" +
                                             "\t\t<td><a href=\"{0}\">{1}</a></td>\n" +
                                             "\t\t<td>{2}</td>\n" +
                                             "\t\t<td>{3}</td>\n" +
                                             "\t</tr>\n", url, name, time, "-");
                }

                foreach (var file in files)
                {
                    var name = Path.GetFileName(file);
                    var time = File.GetLastWriteTime(file);
                    var size = new System.IO.FileInfo(file).Length;
                    var url  = Path.Combine(req.RawUrl, name.UrlEncode());
                    fileList += string.Format("\t<tr>\n" +
                                              "\t\t<td><img src=\"/static/file.gif\"></td>\n" +
                                              "\t\t<td><a href=\"{0}\">{1}</a></td>\n" +
                                              "\t\t<td>{2}</td>\n" +
                                              "\t\t<td>{3}</td>\n" +
                                              "\t</tr>\n", url, name, time, LLTools.BytesToString(size));
                }

                string listTable = "<table cellpadding=\"5\"cellspacing=\"0\">\n" +
                                   "\t<tr><th valign=\"top\"><img src=\"/static/blank.gif\"></th><th>Name</th><th>Last modified</th><th>Size</th></tr>\n" +
                                   "\t<tr><th colspan=\"4\"><hr></th></tr>\n" +
                                   "{0}\n" +
                                   "{1}" +
                                   "</table>\n";

                listTable = string.Format(listTable, dirList, fileList);
                string output = string.Format(
                    "<html>\n" +
                    "\t<head>\n" +
                    "\t\t<title>OpenSatelliteProject - {0}</title>\n" +
                    "\t</head>\n" +
                    "\t<body>\n" +
                    "\t<h2>OpenSatelliteProject {0}</h2>\n" +
                    "\t</BR>\n" +
                    "\t{1}\n" +
                    "\t</body>\n" +
                    "</html>", "/" + relPath.UrlDecode(), listTable);

                res.StatusCode = (int)HttpStatusCode.OK;
                res.WriteContent(Encoding.UTF8.GetBytes(output));
            }
            else
            {
                res.StatusCode = (int)HttpStatusCode.NotFound;
                string res404 = "File not found";
                res.WriteContent(Encoding.UTF8.GetBytes(res404));
            }
        }
Example #48
0
        private void OnGetMstInfoJsonHttpRequestHandler(HttpRequestEventArgs eventArgs)
        {
            var response = eventArgs.Response;

            HtmlDocument html = new HtmlDocument();

            html.Title = "MST Info";
            html.AddMeta(new KeyValuePair <string, string>("charset", "utf-8"));
            html.AddMeta(new KeyValuePair <string, string>("name", "viewport"), new KeyValuePair <string, string>("content", "width=device-width, initial-scale=1"));

            html.Links.Add(new HtmlLinkElement()
            {
                Href        = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css",
                Rel         = "stylesheet",
                Integrity   = "sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl",
                Crossorigin = "anonymous"
            });

            html.Scripts.Add(new HtmlScriptElement()
            {
                Src         = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js",
                Integrity   = "sha384-b5kHyXgcpbZJO/tY9Ul7kGkf1S0CWuKcCD38l8YkeH8z8QjE0GmW1gYU5S9FOnJ0",
                Crossorigin = "anonymous"
            });

            html.Body.AddClass("body");

            var container = html.CreateElement("div");

            container.AddClass("container-fluid pt-5");
            html.Body.AppendChild(container);

            var h1 = html.CreateElement("h1");

            h1.InnerText = $"{Mst.Name} {Mst.Version}";
            container.AppendChild(h1);

            var row = html.CreateElement("div");

            row.AddClass("row");
            container.AppendChild(row);

            var col1 = html.CreateElement("div");

            col1.AddClass("col-md-4");
            row.AppendChild(col1);

            var col2 = html.CreateElement("div");

            col2.AddClass("col-md-8");
            row.AppendChild(col2);

            GenerateMachineInfo(html, col1);

            GenerateListOfModules(html, col2);

            byte[] contents = Encoding.UTF8.GetBytes(html.ToString());

            response.ContentType     = "text/html";
            response.ContentEncoding = Encoding.UTF8;
            response.ContentLength64 = contents.LongLength;
            response.Close(contents, true);
        }
Example #49
0
		public void OnHttpRequest(object aSender, HttpRequestEventArgs ea)
		{
			AddLog(String.Format("Request to {0}", ea.Request.Header.RequestPath));
		}
 public DynamicFileRequestedEventArgs(HttpRequestEventArgs args)
 {
     request = args;
 }