Updated docs
This commit is contained in:
@@ -13,12 +13,6 @@ namespace HopFrame.Security {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace HopFrame.Web {
|
|
||||||
class RegisterData {
|
|
||||||
+RepeatedPassword: string
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace HopFrame.Api {
|
namespace HopFrame.Api {
|
||||||
class SingleValueResult<TValue> {
|
class SingleValueResult<TValue> {
|
||||||
+Value: TValue
|
+Value: TValue
|
||||||
@@ -29,6 +23,4 @@ namespace HopFrame.Api {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UserRegister <|-- RegisterData
|
|
||||||
|
|
||||||
@enduml
|
@enduml
|
||||||
@@ -11,9 +11,6 @@ namespace HopFrame.Database {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class TokenEntry {
|
class TokenEntry {
|
||||||
{static} +RefreshTokenType: int = 0
|
|
||||||
{static} +AccessTokenType: int = 1
|
|
||||||
|
|
||||||
+Type: int
|
+Type: int
|
||||||
+Token: string
|
+Token: string
|
||||||
+UserId: string
|
+UserId: string
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 12 KiB |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
13
docs/README.md
Normal file
13
docs/README.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# HopFrame documentation
|
||||||
|
These sides contain all documentation available for the HopFrame modules
|
||||||
|
|
||||||
|
## Content
|
||||||
|
| Topic | Description | Document |
|
||||||
|
|----------|------------------------------------------------|-----------------------|
|
||||||
|
| Models | All models used by the HopFrame | [link](./models.md) |
|
||||||
|
| Services | All services provided by the HopFrame | [link](./services.md) |
|
||||||
|
| Usage | How to properly implement the HopFrame modules | [link](./usage.md) |
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
Both the HopFrame.Api and HopFrame.Web modules are dependent on the HopFrame.Database and HopFrame.Security modules.
|
||||||
|
So all models and services provided by these modules are available in the other modules as well.
|
||||||
@@ -6,16 +6,16 @@ This page shows all models that HopFrame uses.
|
|||||||
## Base Models
|
## Base Models
|
||||||
These are the models used by the various database services.
|
These are the models used by the various database services.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
## API Models
|
## API Models
|
||||||
These are the models used by the REST API and the Blazor API.
|
These are the models used by the REST API and the Blazor API.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
## Database Models
|
## Database Models
|
||||||
These are the models that correspond to the scheme in the Database
|
These are the models that correspond to the scheme in the Database
|
||||||
|
|
||||||

|

|
||||||
145
docs/services.md
Normal file
145
docs/services.md
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
# HopFrame Services
|
||||||
|
This page describes all services provided by the HopFrame.
|
||||||
|
You can use these services by specifying them as a dependency. All of them are scoped dependencies.
|
||||||
|
|
||||||
|
## HopFrame.Security
|
||||||
|
### ITokenContext
|
||||||
|
This service provides the information given by the current request
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public interface ITokenContext {
|
||||||
|
bool IsAuthenticated { get; }
|
||||||
|
|
||||||
|
User User { get; }
|
||||||
|
|
||||||
|
Guid AccessToken { get; }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### IUserService
|
||||||
|
This service simplifies the data access of the user table in the database.
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public interface IUserService {
|
||||||
|
Task<IList<User>> GetUsers();
|
||||||
|
|
||||||
|
Task<User> GetUser(Guid userId);
|
||||||
|
|
||||||
|
Task<User> GetUserByEmail(string email);
|
||||||
|
|
||||||
|
Task<User> GetUserByUsername(string username);
|
||||||
|
|
||||||
|
Task<User> AddUser(UserRegister user);
|
||||||
|
|
||||||
|
Task UpdateUser(User user);
|
||||||
|
|
||||||
|
Task DeleteUser(User user);
|
||||||
|
|
||||||
|
Task<bool> CheckUserPassword(User user, string password);
|
||||||
|
|
||||||
|
Task ChangePassword(User user, string password);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### IPermissionService
|
||||||
|
This service handles all permission and group interactions with the data source.
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public interface IPermissionService {
|
||||||
|
Task<bool> HasPermission(string permission, Guid user);
|
||||||
|
|
||||||
|
Task<IList<PermissionGroup>> GetPermissionGroups();
|
||||||
|
|
||||||
|
Task<PermissionGroup> GetPermissionGroup(string name);
|
||||||
|
|
||||||
|
Task EditPermissionGroup(PermissionGroup group);
|
||||||
|
|
||||||
|
Task<IList<PermissionGroup>> GetUserPermissionGroups(User user);
|
||||||
|
|
||||||
|
Task RemoveGroupFromUser(User user, PermissionGroup group);
|
||||||
|
|
||||||
|
Task<PermissionGroup> CreatePermissionGroup(string name, bool isDefault = false, string description = null);
|
||||||
|
|
||||||
|
Task DeletePermissionGroup(PermissionGroup group);
|
||||||
|
|
||||||
|
Task<Permission> GetPermission(string name, IPermissionOwner owner);
|
||||||
|
|
||||||
|
Task AddPermission(IPermissionOwner owner, string permission);
|
||||||
|
|
||||||
|
Task RemovePermission(Permission permission);
|
||||||
|
|
||||||
|
Task<string[]> GetFullPermissions(string user);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## HopFrame.Api
|
||||||
|
### LogicResult
|
||||||
|
Logic result is an extension of the ActionResult for an ApiController. It provides simple Http status results with either a message or data by specifying the generic type.
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public class LogicResult : ILogicResult {
|
||||||
|
public static LogicResult Ok();
|
||||||
|
|
||||||
|
public static LogicResult BadRequest();
|
||||||
|
|
||||||
|
public static LogicResult BadRequest(string message);
|
||||||
|
|
||||||
|
public static LogicResult Forbidden();
|
||||||
|
|
||||||
|
public static LogicResult Forbidden(string message);
|
||||||
|
|
||||||
|
public static LogicResult NotFound();
|
||||||
|
|
||||||
|
public static LogicResult NotFound(string message);
|
||||||
|
|
||||||
|
public static LogicResult Conflict();
|
||||||
|
|
||||||
|
public static LogicResult Conflict(string message);
|
||||||
|
|
||||||
|
public static LogicResult Forward(LogicResult result);
|
||||||
|
|
||||||
|
public static LogicResult Forward<T>(ILogicResult<T> result);
|
||||||
|
|
||||||
|
public static implicit operator ActionResult(LogicResult v);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LogicResult<T> : ILogicResult<T> {
|
||||||
|
public static LogicResult<T> Ok();
|
||||||
|
|
||||||
|
public static LogicResult<T> Ok(T result);
|
||||||
|
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### IAuthLogic
|
||||||
|
This service handles all logic needed to provide the authentication endpoints by using the LogicResults.
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public interface IAuthLogic {
|
||||||
|
Task<LogicResult<SingleValueResult<string>>> Login(UserLogin login);
|
||||||
|
|
||||||
|
Task<LogicResult<SingleValueResult<string>>> Register(UserRegister register);
|
||||||
|
|
||||||
|
Task<LogicResult<SingleValueResult<string>>> Authenticate();
|
||||||
|
|
||||||
|
Task<LogicResult> Logout();
|
||||||
|
|
||||||
|
Task<LogicResult> Delete(UserPasswordValidation validation);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## HopFrame.Web
|
||||||
|
### IAuthService
|
||||||
|
This service handles all the authentication like login or register. It properly creates all tokens so the user can be identified
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public interface IAuthService {
|
||||||
|
Task Register(UserRegister register);
|
||||||
|
Task<bool> Login(UserLogin login);
|
||||||
|
Task Logout();
|
||||||
|
|
||||||
|
Task<TokenEntry> RefreshLogin();
|
||||||
|
Task<bool> IsLoggedIn();
|
||||||
|
}
|
||||||
|
```
|
||||||
70
docs/usage.md
Normal file
70
docs/usage.md
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
# HopFrame Usage
|
||||||
|
There are two different versions of HopFrame, either the Web API version or the full Blazor web version.
|
||||||
|
|
||||||
|
## Ho to use the Web API version
|
||||||
|
|
||||||
|
1. Add the HopFrame.Api library to your project:
|
||||||
|
|
||||||
|
```
|
||||||
|
dotnet add package HopFrame.Api
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Create a DbContext that inherits the ``HopDbContext`` and add a data source
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public class DatabaseContext : HopDbContextBase {
|
||||||
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
|
||||||
|
base.OnConfiguring(optionsBuilder);
|
||||||
|
|
||||||
|
optionsBuilder.UseSqlite("...");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Add the DbContext and HopFrame to your services
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
builder.Services.AddDbContext<DatabaseContext>();
|
||||||
|
builder.Services.AddHopFrame<DatabaseContext>();
|
||||||
|
```
|
||||||
|
|
||||||
|
## How to use the Blazor API
|
||||||
|
|
||||||
|
1. Add the HopFrame.Web library to your project
|
||||||
|
|
||||||
|
```
|
||||||
|
dotnet add package HopFrame.Web
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Create a DbContext that inherits the ``HopDbContext`` and add a data source
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
public class DatabaseContext : HopDbContextBase {
|
||||||
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
|
||||||
|
base.OnConfiguring(optionsBuilder);
|
||||||
|
|
||||||
|
optionsBuilder.UseSqlite("...");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Add the DbContext and HopFrame to your services
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
builder.Services.AddDbContext<DatabaseContext>();
|
||||||
|
builder.Services.AddHopFrame<DatabaseContext>();
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Add the authentication middleware to your app
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
app.UseMiddleware<AuthMiddleware>();
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Add the HopFrame pages to your Razor components
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
app.MapRazorComponents<App>()
|
||||||
|
.AddHopFrameAdminPages()
|
||||||
|
.AddInteractiveServerRenderMode();
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user