• MuPage CMS ASP.NET 97k 5 0 5 1

MuPage CMS ASP.NET 97k

Started by cepoidevs, Yesterday at 08:53 PM

cepoidevs

MuPage ASP.NET



Project Overview

Note: This project was built from scratch using Kayito 97k server files and database. Therefore, all the features and data management—like classes, modules, and more—are currently only compatible with this specific version of the files and database. 
Please note that I am the developer of this project, and it's still under active development, so things may change. If you encounter any bugs, issues, or have suggestions, feel free to contact me.


I've set up a test server where you can see the site in action and try its features: https://cepoidevs.somee.com

Main Features:
• Full Game Integration: Connects directly with the database to ensure all information is always up-to-date.
• Detailed Rankings: Displays player rankings (overall, Blood Castle, Devil Square) plus a full guild ranking with original clan crests and guild master classes.
• Live Server Info: Shows real-time stats on accounts, characters, guilds, online users, and the current server status.

Account & Character Management:
• Secure Registration & Login: New users can create accounts, and existing users can log in using a secure hybrid password system (robust hashing and salting for web compatibility).
• User Dashboard: Players can manage their characters, including adding stat points and performing resets right from the website.

Dynamic Content & Easy Maintenance:
• News Section: Loads posts dynamically from a JSON file, making content updates quick and code-free.
• Downloads Section: Dedicated area for game clients and patches.

Easy Setup & Deployment:
• Designed for deployment on Windows hosting that supports ASP.NET.
• Includes a guided web installer to easily configure the database connection string and simplify initial setup.




Demo Video 2.0.0

Sorry but you are not allowed to view spoiler contents.


Admin Panel Video

Sorry but you are not allowed to view spoiler contents.




Modules


News: Displays the latest server news. 
Register: Allows users to create new accounts. 
Rankings: Main rankings module, including: 
  – Player Ranking 
  – Blood Castle Ranking 
  – Guild Ranking 
  – Devil Square Ranking 
Characters: Shows characters linked to the logged-in user's account. 
ResetChar: Lets users reset their characters. 
AddStats: Enables users to add stat points to their characters. 
Downloads: Section for client or patch downloads. 
Top10Players: Displays a top 5 players list in the left sidebar. 
Top3Guilds: Shows a top 3 guilds list in the left sidebar. 
ServerInfo: Displays server stats and info in the left sidebar. 
Install: Web installer module for initial database setup. 


UPDATE 1.0.0 
• Installation module improved: now supports adding users with permissions. 
• Added an admin panel to manage news, downloads, and basic character editing. 
• News management now includes TinyMCE WYSIWYG rich text editing.

UPDATE 1.0.1 
• Fixed missing images folder. 
• Fixed a logic error during web installation.

UPDATE 2.0.0 
• Redesigned the main page layout; moved info module to the right side. 
• Fixed bug where online users were shown even when server/player was offline. 
• Added a module in the admin panel for easier server info editing.

UPDATE 2.0.1 (express fix) 
• Added cache busting for site CSS.


ASP.NET Security Advantages

Built-in Session and Authentication Management 
ASP.NET provides secure methods to: 
 • Authenticate users (e.g., via forms or Windows integrated authentication). 
 • Manage sessions without exposing session IDs in URLs (prevents session hijacking).

Protection Against Common Attacks 
ASP.NET includes default safeguards against: 
 • XSS (Cross-site scripting) by filtering dangerous input when using framework controls properly. 
 • CSRF (Cross-site request forgery) with easy-to-enable anti-CSRF protections on forms. 
 • SQL Injection, when using Entity Framework or parameterized queries (e.g., SqlCommand.Parameters).

Input Validation 
Built-in classes to validate input data and block malicious or unexpected content.

Centralized Security Configuration 
The web.config file lets you: 
 • Restrict access by IP or user roles. 
 • Encrypt sensitive sections like connection strings. 
 • Automatically redirect unauthenticated users to login.

Microsoft Support & Updates 
Backed by Microsoft, ASP.NET benefits from: 
 • Regular security updates. 
 • Official documentation. 
 • Integration with Azure and other tools for enhanced security.


Requirements

To host only the ASP.NET website (excluding the Mu Online game server), your hosting provider needs: 
Server OS: 
 • Windows Server (required to run ASP.NET Web Forms).

Web Server: 
 • IIS (Internet Information Services) installed and configured.

.NET Framework: 
 • Support for .NET Framework 4.8 (or compatible version used to build your project).


Installation Instructions

Make sure your SQL Server database is already set up.

Upload all files inside the `mupage` folder to your hosting server.

Then, access the installer by visiting: https://YOURDOMAIN:PORT/Default.aspx?id=install

Note: Replace YOURDOMAIN with your hosting domain and PORT with your port number if needed (for local installs, it might be https://localhost:PORT/Default.aspx?id=install). For typical web hosting, just https://YOURDOMAIN/Default.aspx?id=install should work.

Follow the installer steps and enter your database credentials.






If your database has no password, check the Windows Authentication (Integrated Security) box.

Next, create a user account to manage the site modules!



IMPORTANT: AFTER INSTALLING THE SITE, BEFORE USING IT YOU MUST RUN THE SQL QUERY FOUND IN THE /MODULES/INSTALL FOLDER (OR SEE BELOW). ONCE YOU'VE RUN THE QUERY, DELETE ALL FILES INSIDE THE /MODULES/INSTALL/ FOLDER.

SQL QUERY:

USE MuOnline97;
GO

PRINT 'Iniciando modernización avanzada de la tabla MEMB_INFO...';

-- Paso 1 Declarar una variable para guardar el nombre de la restricción
DECLARE @ConstraintName NVARCHAR(255);

-- Paso 2 Eliminar restricción de AccountExpireDate si existe
SELECT @ConstraintName = OBJECT_NAME(default_object_id)
FROM sys.columns
WHERE object_id = OBJECT_ID('MEMB_INFO') AND name = 'AccountExpireDate';

IF @ConstraintName IS NOT NULL
BEGIN
    EXEC('ALTER TABLE MEMB_INFO DROP CONSTRAINT ' + @ConstraintName);
    PRINT 'Restricción de AccountExpireDate eliminada.';
END

-- Paso 3 Eliminar restricción de Bloc_Expire si existe
SELECT @ConstraintName = OBJECT_NAME(default_object_id)
FROM sys.columns
WHERE object_id = OBJECT_ID('MEMB_INFO') AND name = 'Bloc_Expire';

IF @ConstraintName IS NOT NULL
BEGIN
    EXEC('ALTER TABLE MEMB_INFO DROP CONSTRAINT ' + @ConstraintName);
    PRINT 'Restricción de Bloc_Expire eliminada.';
END

-- Paso 4 Modernizar columnas
ALTER TABLE MEMB_INFO ALTER COLUMN AccountExpireDate DATETIME NOT NULL;
ALTER TABLE MEMB_INFO ALTER COLUMN Bloc_Expire DATETIME NOT NULL;
PRINT 'Columnas de fecha modernizadas a DATETIME.';

-- Paso 5 Agregar restricciones por defecto
ALTER TABLE MEMB_INFO ADD CONSTRAINT DF_MEMB_INFO_AccountExpireDate DEFAULT GETDATE() FOR AccountExpireDate;
ALTER TABLE MEMB_INFO ADD CONSTRAINT DF_MEMB_INFO_Bloc_Expire DEFAULT GETDATE() FOR Bloc_Expire;
PRINT 'Nuevas restricciones de valor por defecto creadas.';

-- Paso 6 Añadir columnas para contraseña web segura
PRINT 'Añadiendo columnas para la contraseña web segura a la tabla MEMB_INFO...';

IF NOT EXISTS (SELECT  FROM sys.columns WHERE object_id = OBJECT_ID('MEMB_INFO') AND name = 'WebPasswordHash')
BEGIN
    ALTER TABLE MEMB_INFO ADD WebPasswordHash NVARCHAR(128) NULL;
    PRINT 'Columna WebPasswordHash añadida.';
END

IF NOT EXISTS (SELECT  FROM sys.columns WHERE object_id = OBJECT_ID('MEMB_INFO') AND name = 'WebSalt')
BEGIN
    ALTER TABLE MEMB_INFO ADD WebSalt NVARCHAR(64) NULL;
    PRINT 'Columna WebSalt añadida.';
END

PRINT '¡Tabla MEMB_INFO actualizada con éxito y de forma definitiva!';

-- Crear tabla Noticias si no existe
PRINT 'Creando la tabla Noticias...';

IF NOT EXISTS (SELECT  FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Noticias]') AND type = N'U')
BEGIN
    CREATE TABLE [dbo].[Noticias](
        [Id] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
        [Titulo] NVARCHAR(255) NOT NULL,
        [Contenido] NVARCHAR(MAX) NOT NULL,
        [FechaPublicacion] DATETIME NOT NULL DEFAULT GETDATE(),
        [Autor] NVARCHAR(50) NULL,
        [ImagenURL] NVARCHAR(500) NULL,
        [EsVisible] BIT NOT NULL DEFAULT 1
    );
    PRINT 'Tabla Noticias creada con éxito.';
END
ELSE
BEGIN
    PRINT 'La tabla Noticias ya existe.';
END

-- Crear tabla Downloads si no existe
PRINT 'Creando la tabla Downloads...';

IF NOT EXISTS (SELECT  FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Downloads]') AND type = N'U')
BEGIN
    CREATE TABLE [dbo].[Downloads](
        [Id] INT IDENTITY(1,1) NOT NULL,
        [Title] NVARCHAR(200) NOT NULL,
        [Description] NVARCHAR(MAX) NULL,
        [Url] NVARCHAR(500) NOT NULL,
        [FileSize] NVARCHAR(50) NULL,
        [IsVisible] BIT NOT NULL,
        [Category] NVARCHAR(100) NULL,
        CONSTRAINT [PK_Downloads] PRIMARY KEY CLUSTERED ([Id] ASC)
    );

    ALTER TABLE [dbo].[Downloads] ADD CONSTRAINT [DF_Downloads_IsVisible] DEFAULT ((1)) FOR [IsVisible];
    PRINT 'Tabla Downloads creada con éxito.';
END
ELSE
BEGIN
    PRINT 'La tabla Downloads ya existe.';
END

-- Crear tabla WebSettings si no existe
PRINT 'Creando la tabla WebSettings...';

IF NOT EXISTS (SELECT  FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[WebSettings]') AND type = N'U')
BEGIN
    CREATE TABLE [dbo].[WebSettings](
        [SettingKey] NVARCHAR(50) NOT NULL PRIMARY KEY,
        [SettingValue] NVARCHAR(255) NULL
    );

    PRINT 'Tabla WebSettings creada con éxito. Insertando valores por defecto...';

    -- Insertar valores por defecto
    INSERT INTO WebSettings (SettingKey, SettingValue) VALUES ('ServerVersion', '0.97.11');
    INSERT INTO WebSettings (SettingKey, SettingValue) VALUES ('ServerExperience', '100x');
    INSERT INTO WebSettings (SettingKey, SettingValue) VALUES ('ServerDrop', '60%');
    INSERT INTO WebSettings (SettingKey, SettingValue) VALUES ('GameServerIP', '192.168.0.4');

    PRINT 'Valores por defecto insertados en WebSettings.';
END
ELSE
BEGIN
    PRINT 'La tabla WebSettings ya existe.';
END
GO


DOWNLOAD:


  •  
    The following users thanked this post: Dorin

Powered by SMFPacks Ads Manager Mod