initial commit
This commit is contained in:
178
Api/UserApi.cs
Normal file
178
Api/UserApi.cs
Normal file
@@ -0,0 +1,178 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace Library.Api;
|
||||
|
||||
[Route( "Api/User/[action]/{id?}" )]
|
||||
public class UserApi : APIController
|
||||
{
|
||||
public UserApi( ILogger<UserApi> logger , IConfiguration configuration )
|
||||
: base( logger , configuration )
|
||||
{
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public IActionResult Login( string username , string password )
|
||||
{
|
||||
Trace( "/UserAPI/Login" );
|
||||
|
||||
string? session_id = PrepareSQL( "EXECUTE [usp_user_login] @user , @pass" )
|
||||
.AddParameter( "@user" , username )
|
||||
.AddParameter( "@pass" , password )
|
||||
.ReadSingleString( );
|
||||
|
||||
if ( string.IsNullOrWhiteSpace( session_id ) )
|
||||
return Error( "Невалидно потребителско име/парола" );
|
||||
|
||||
SessionStart( session_id );
|
||||
|
||||
return Success( session_id );
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public IActionResult EditDetails( int id , string? name , string? email )
|
||||
{
|
||||
Trace( "/UserAPI/EditDetails" );
|
||||
|
||||
AssertID( id );
|
||||
AssertParameter( name , 2 );
|
||||
AssertEmail( email , false );
|
||||
AssertLogin( null );
|
||||
|
||||
if ( id != GetUserData( )!.ID && !GetUserData( )!.IsAdmin )
|
||||
return Error( "Access denied" );
|
||||
|
||||
if ( email == null )
|
||||
{
|
||||
PrepareSQL( "UPDATE [dom] SET [ime]=@name WHERE id=@id" )
|
||||
.AddParameter( "@name" , name )
|
||||
.AddParameter( "@id" , id )
|
||||
.ExecuteNonQuery( );
|
||||
}
|
||||
else
|
||||
{
|
||||
PrepareSQL( "UPDATE [dom] SET [ime]=@name,[mail]=@email WHERE id=@id" )
|
||||
.AddParameter( "@name" , name )
|
||||
.AddParameter( "@email" , email )
|
||||
.AddParameter( "@id" , id )
|
||||
.ExecuteNonQuery( );
|
||||
}
|
||||
|
||||
return Success( );
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public IActionResult EditPassword( int id , string? password )
|
||||
{
|
||||
Trace( "/UserAPI/EditPassword" );
|
||||
|
||||
AssertID( id );
|
||||
AssertParameter( password , 5 );
|
||||
AssertLogin( null );
|
||||
|
||||
if ( id != GetUserData( )!.ID && !GetUserData( )!.IsAdmin )
|
||||
return Error( "Access denied" );
|
||||
|
||||
PrepareSQL( "UPDATE [dom] SET [prl] = @new_pass WHERE id=@id" )
|
||||
.AddParameter( "@new_pass" , password )
|
||||
.AddParameter( "@id" , id )
|
||||
.ExecuteNonQuery( );
|
||||
|
||||
return Success( );
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IActionResult Activate( int id )
|
||||
{
|
||||
Trace( "/UserAPI/Activate" );
|
||||
|
||||
AssertID( id );
|
||||
AssertAdmin( );
|
||||
|
||||
PrepareSQL( "UPDATE [dom] SET [is_active]=1 WHERE id=@id" )
|
||||
.AddParameter( "@id" , id )
|
||||
.ExecuteNonQuery( );
|
||||
|
||||
return Success( );
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IActionResult Deactivate( int id )
|
||||
{
|
||||
Trace( "/UserAPI/Deactivate" );
|
||||
|
||||
AssertID( id );
|
||||
AssertAdmin( );
|
||||
|
||||
if ( id == GetUserData( )!.ID )
|
||||
return Error( "Не може да деактивирате себе си!" );
|
||||
|
||||
PrepareSQL( "UPDATE [dom] SET [is_active]=0 WHERE id=@id" )
|
||||
.AddParameter( "@id" , id )
|
||||
.ExecuteNonQuery( );
|
||||
|
||||
return Success( );
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public IActionResult Register( string? username , string? password , string? name )
|
||||
{
|
||||
Trace( "/UserAPI/Register" );
|
||||
|
||||
AssertEmail( username , true );
|
||||
AssertParameter( password , 5 );
|
||||
AssertParameter( name , 2 );
|
||||
|
||||
string? new_user_id = PrepareSQL( "INSERT INTO [dom] ([mail],[prl],[ime]) OUTPUT INSERTED.id VALUES (@user,@pass,@name)" )
|
||||
.AddParameter( "@user" , username )
|
||||
.AddParameter( "@pass" , password )
|
||||
.AddParameter( "@name" , name )
|
||||
.ReadSingleString( );
|
||||
|
||||
if ( new_user_id == null )
|
||||
return Error( "Емайл адреса вече е регистриран" );
|
||||
|
||||
string? session_id = PrepareSQL( "EXECUTE [usp_user_login] @user , @pass" )
|
||||
.AddParameter( "@user" , username )
|
||||
.AddParameter( "@pass" , password )
|
||||
.ReadSingleString( );
|
||||
|
||||
if ( session_id == null )
|
||||
return Error( "Емайл адреса вече е регистриран" );
|
||||
|
||||
SessionStart( session_id );
|
||||
|
||||
return Success( session_id );
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public IActionResult Forgot( string ? username )
|
||||
{
|
||||
Trace( "/UserAPI/Forgot" );
|
||||
|
||||
AssertEmail( username , true );
|
||||
|
||||
string? password = PrepareSQL( "SELECT [prl] FROM [dom] WHERE [mail]=@user" )
|
||||
.AddParameter( "@user" , username )
|
||||
.ReadSingleString( );
|
||||
|
||||
if ( string.IsNullOrWhiteSpace( password ) )
|
||||
return Error( "Невалидно потребителско име" );
|
||||
|
||||
return Error( "Тук се очаква да се изпрати код за ресет на мейла. Засега ето това е паролата: " + password );
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IActionResult Logout( )
|
||||
{
|
||||
Trace( "/UserAPI/Logout" );
|
||||
|
||||
if ( GetUserData( ) != null )
|
||||
{
|
||||
PrepareSQL( "EXECUTE [usp_user_logout] @session_id" )
|
||||
.AddParameter( "@session_id" , GetUserData( )!.SessionID )
|
||||
.ExecuteNonQuery( );
|
||||
}
|
||||
SessionCancel( );
|
||||
return Success( "1" );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user