Skip to content

Commit

Permalink
feat: removed docs and started moving core components to extension
Browse files Browse the repository at this point in the history
  • Loading branch information
zZHorizonZz committed Aug 19, 2024
1 parent 74e6b03 commit a9d8c5b
Show file tree
Hide file tree
Showing 152 changed files with 485 additions and 12,869 deletions.
33 changes: 0 additions & 33 deletions .github/workflows/deploy-docs.yml

This file was deleted.

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ It's built with [Quarkus](https://quarkus.io) and provides authentication via OA
- [ ] Admin user management
- [X] OAuth2 support (Github, Google, Facebook, etc.)
- [ ] Organizations management
- [ ] API/Access token generation
- [ ] API/Access sessionToken generation

## Contributing

Expand Down
4 changes: 4 additions & 0 deletions core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@

<dependencies>
<!-- Zenei Dependencies -->
<dependency>
<groupId>dev.cloudeko</groupId>
<artifactId>core-extension</artifactId>
</dependency>
<dependency>
<groupId>dev.cloudeko</groupId>
<artifactId>external-authentication</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dev.cloudeko.zenei.application.web.model.request;

import dev.cloudeko.zenei.domain.model.auth.Strategy;
import dev.cloudeko.zenei.domain.model.user.CreateUserInput;
import dev.cloudeko.zenei.extension.core.model.session.Strategy;
import dev.cloudeko.zenei.extension.core.model.user.CreateUserInput;
import jakarta.ws.rs.FormParam;
import lombok.AllArgsConstructor;
import lombok.Data;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import dev.cloudeko.zenei.domain.model.email.EmailAddress;
import dev.cloudeko.zenei.extension.core.model.email.EmailAddress;
import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.Data;
import lombok.NoArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dev.cloudeko.zenei.application.web.model.response;

import com.fasterxml.jackson.annotation.JsonProperty;
import dev.cloudeko.zenei.domain.model.account.ExternalAccessToken;
import dev.cloudeko.zenei.extension.core.model.account.ExternalAccessToken;
import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.Data;
import lombok.NoArgsConstructor;
Expand All @@ -10,7 +10,7 @@
@Data
@NoArgsConstructor
@RegisterForReflection
@Schema(name = "External Access Token", description = "Represents an access token from an external provider")
@Schema(name = "External Access SessionToken", description = "Represents an access token from an external provider")
public class ExternalAccessTokenResponse {

@JsonProperty("id_token")
Expand All @@ -26,7 +26,7 @@ public class ExternalAccessTokenResponse {
private String accessToken;

@JsonProperty("token_type")
@Schema(description = "Token type")
@Schema(description = "SessionToken type")
private String tokenType;

@JsonProperty("scope")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

@NoArgsConstructor
@RegisterForReflection
@Schema(name = "External Access Token List", description = "Represents a list of external access tokens")
@Schema(name = "External Access SessionToken List", description = "Represents a list of external access tokens")
public class ExternalAccessTokensResponse extends ArrayList<ExternalAccessTokenResponse> {

public ExternalAccessTokensResponse(List<ExternalAccessTokenResponse> externalAccessTokens) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import dev.cloudeko.zenei.domain.model.user.User;
import dev.cloudeko.zenei.extension.core.model.user.User;
import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.Data;
import lombok.NoArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package dev.cloudeko.zenei.application.web.model.response;

import dev.cloudeko.zenei.domain.model.user.User;
import dev.cloudeko.zenei.extension.core.model.user.User;
import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.Data;
import lombok.NoArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dev.cloudeko.zenei.application.web.model.response;

import com.fasterxml.jackson.annotation.JsonProperty;
import dev.cloudeko.zenei.domain.model.Token;
import dev.cloudeko.zenei.extension.core.model.session.SessionToken;
import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.Data;
import lombok.NoArgsConstructor;
Expand All @@ -10,8 +10,8 @@
@Data
@NoArgsConstructor
@RegisterForReflection
@Schema(name = "Token", description = "Represents a token response")
public class TokenResponse {
@Schema(name = "SessionToken", description = "Represents a token response")
public class SessionTokenResponse {

@JsonProperty("access_token")
@Schema(description = "Access token for the user")
Expand All @@ -29,10 +29,10 @@ public class TokenResponse {
@Schema(description = "Refresh token for the user")
private String refreshToken;

public TokenResponse(Token token) {
this.accessToken = token.getAccessToken();
this.tokenType = token.getTokenType();
this.expiresIn = token.getExpiresIn();
this.refreshToken = token.getRefreshToken();
public SessionTokenResponse(SessionToken sessionToken) {
this.accessToken = sessionToken.getAccessToken();
this.tokenType = sessionToken.getTokenType();
this.expiresIn = sessionToken.getExpiresIn();
this.refreshToken = sessionToken.getRefreshToken();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@
import dev.cloudeko.zenei.application.web.model.request.LoginRequest;
import dev.cloudeko.zenei.application.web.model.request.RegisterRequest;
import dev.cloudeko.zenei.application.web.model.response.PrivateUserResponse;
import dev.cloudeko.zenei.application.web.model.response.TokenResponse;
import dev.cloudeko.zenei.application.web.model.response.SessionTokenResponse;
import dev.cloudeko.zenei.domain.feature.*;
import dev.cloudeko.zenei.domain.model.email.EmailAddressInput;
import dev.cloudeko.zenei.domain.model.email.VerifyMagicLinkInput;
import dev.cloudeko.zenei.domain.model.token.LoginPasswordInput;
import dev.cloudeko.zenei.extension.core.model.email.EmailAddressInput;
import dev.cloudeko.zenei.extension.core.model.email.VerifyMagicLinkInput;
import dev.cloudeko.zenei.infrastructure.config.ApplicationConfig;
import jakarta.transaction.Transactional;
import jakarta.validation.Valid;
Expand Down Expand Up @@ -65,8 +64,8 @@ public Response register(@BeanParam @Valid RegisterRequest request) {
@Path("/login")
@Produces(MediaType.APPLICATION_JSON)
public Response login(@BeanParam @Valid LoginRequest request) {
final var token = loginUserWithPassword.handle(new LoginPasswordInput(request.getIdentifier(), request.getPassword()));
return Response.ok(new TokenResponse(token)).build();
final var token = loginUserWithPassword.handle(request.getIdentifier(), request.getPassword());
return Response.ok(new SessionTokenResponse(token)).build();
}

@POST
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package dev.cloudeko.zenei.application.web.resource.frontend;

import dev.cloudeko.zenei.application.web.model.response.TokenResponse;
import dev.cloudeko.zenei.application.web.model.response.SessionTokenResponse;
import dev.cloudeko.zenei.domain.feature.LoginUserWithAuthorizationCode;
import dev.cloudeko.zenei.extension.external.ExternalAuthProvider;
import dev.cloudeko.zenei.extension.external.ExternalAuthResolver;
Expand Down Expand Up @@ -58,7 +58,7 @@ public Response callback(@PathParam("provider") String provider,

final var token = loginUserWithAuthorizationCode.handle(provider, code);

return Response.ok(new TokenResponse(token)).build();
return Response.ok(new SessionTokenResponse(token)).build();
}

private Optional<ExternalAuthProvider> getProviderConfig(String provider) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package dev.cloudeko.zenei.application.web.resource.frontend;

import dev.cloudeko.zenei.application.web.model.response.TokenResponse;
import dev.cloudeko.zenei.domain.feature.*;
import dev.cloudeko.zenei.domain.model.token.LoginPasswordInput;
import dev.cloudeko.zenei.domain.model.token.RefreshTokenInput;
import dev.cloudeko.zenei.application.web.model.response.SessionTokenResponse;
import dev.cloudeko.zenei.domain.feature.RefreshAccessToken;
import dev.cloudeko.zenei.infrastructure.config.ApplicationConfig;
import jakarta.transaction.Transactional;
import jakarta.ws.rs.POST;
Expand All @@ -28,7 +26,7 @@ public class SessionResource {
@Path("/refresh")
@Produces(MediaType.APPLICATION_JSON)
public Response token(@QueryParam("refresh_token") String refreshToken) {
final var token = refreshAccessToken.handle(new RefreshTokenInput(refreshToken));
return Response.ok(new TokenResponse(token)).build();
final var token = refreshAccessToken.handle(refreshToken);
return Response.ok(new SessionTokenResponse(token)).build();
}
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,19 @@
package dev.cloudeko.zenei.application.web.resource.frontend;

import dev.cloudeko.zenei.application.web.model.request.RegisterRequest;
import dev.cloudeko.zenei.application.web.model.response.PrivateUserResponse;
import dev.cloudeko.zenei.application.web.model.response.TokenResponse;
import dev.cloudeko.zenei.domain.feature.*;
import dev.cloudeko.zenei.domain.model.email.EmailAddressInput;
import dev.cloudeko.zenei.domain.model.email.VerifyMagicLinkInput;
import dev.cloudeko.zenei.domain.model.token.LoginPasswordInput;
import dev.cloudeko.zenei.domain.model.token.RefreshTokenInput;
import dev.cloudeko.zenei.domain.feature.FindUserByIdentifier;
import dev.cloudeko.zenei.infrastructure.config.ApplicationConfig;
import io.quarkus.security.Authenticated;
import jakarta.transaction.Transactional;
import jakarta.validation.Valid;
import jakarta.ws.rs.*;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.SecurityContext;
import lombok.AllArgsConstructor;
import org.eclipse.microprofile.openapi.annotations.tags.Tag;

import java.net.URI;

@Path("/frontend/user")
@AllArgsConstructor
@Tag(name = "User Service", description = "API for user authentication")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dev.cloudeko.zenei.domain.feature;

import dev.cloudeko.zenei.domain.model.user.CreateUserInput;
import dev.cloudeko.zenei.domain.model.user.User;
import dev.cloudeko.zenei.extension.core.model.user.CreateUserInput;
import dev.cloudeko.zenei.extension.core.model.user.User;

public interface CreateUser {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package dev.cloudeko.zenei.domain.feature;

import dev.cloudeko.zenei.domain.model.user.User;
import dev.cloudeko.zenei.extension.core.model.user.User;

/**
* The {@code FindUserByIdentifier} interface represents a contract for finding a User object based on a provided identifier. It
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package dev.cloudeko.zenei.domain.feature;

import dev.cloudeko.zenei.domain.model.account.ExternalAccessToken;
import dev.cloudeko.zenei.extension.core.model.account.ExternalAccessToken;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package dev.cloudeko.zenei.domain.feature;

import dev.cloudeko.zenei.domain.model.user.User;
import dev.cloudeko.zenei.extension.core.model.user.User;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package dev.cloudeko.zenei.domain.feature;

import dev.cloudeko.zenei.domain.model.Token;
import dev.cloudeko.zenei.extension.core.model.session.SessionToken;

public interface LoginUserWithAuthorizationCode {
Token handle(String provider, String code);
SessionToken handle(String provider, String code);
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,35 +1,18 @@
package dev.cloudeko.zenei.domain.feature;

import dev.cloudeko.zenei.domain.model.Token;
import dev.cloudeko.zenei.domain.model.token.LoginPasswordInput;
import dev.cloudeko.zenei.extension.core.model.session.SessionToken;

/**
* The {@code LoginUserWithPassword} interface represents a contract for authenticating a user with a password. It defines a
* single method {@code handle} which takes a {@link LoginPasswordInput} object as a parameter and returns a {@link Token}
* object if the authentication is successful.
* <p>
* Implementations of this interface should handle the authentication process by verifying the user's password. If the password
* is valid, a token should be generated and returned . Otherwise, an appropriate exception should be thrown.
* </p>
* The {@link Token} object represents an authentication token and contains information such as the access token, token type,
* and expiration time.
*
* @see Token
* @see LoginPasswordInput
* Interface for handling user login with a password.
*/
public interface LoginUserWithPassword {

/**
* The {@code handle} method is a part of the {@code LoginUserWithPassword} interface. It takes a {@link LoginPasswordInput}
* object as a parameter and returns a {@link Token} object if the authentication is successful.
*
* <p>Implementations of this method should handle the authentication process by verifying the user's password. If the
* password
* is valid, a token should be generated and returned. Otherwise, an appropriate exception should be thrown.</p>
* Handles the login process for a user using their identifier and password.
*
* @param loginPasswordInput the input object that contains the user's login credentials (email and password)
* @return the authentication token if the authentication is successful
* @see Token
* @see LoginPasswordInput
* @param identifier the unique identifier of the user (e.g., username or email)
* @param password the password of the user
* @return a SessionToken representing the user's session
*/
Token handle(LoginPasswordInput loginPasswordInput);
SessionToken handle(String identifier, String password);
}
Loading

0 comments on commit a9d8c5b

Please sign in to comment.