mirror of
https://github.com/zitadel/zitadel.git
synced 2025-12-12 10:36:44 +00:00
PoC
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@bufbuild/buf": "^1.14.0",
|
||||
"@mocks-server/main": "^4.1.0",
|
||||
"@types/jest": "^29.5.1",
|
||||
"@zitadel/tsconfig": "workspace:*",
|
||||
"eslint": "^7.32.0",
|
||||
|
||||
57
packages/zitadel-server/src/middleware.test.ts
Normal file
57
packages/zitadel-server/src/middleware.test.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import { CallOptions, ClientMiddlewareCall, Metadata, MethodDescriptor } from "nice-grpc";
|
||||
import { authMiddleware } from "./middleware";
|
||||
|
||||
describe('authMiddleware', () => {
|
||||
const scenarios = [
|
||||
{
|
||||
name: 'should add authorization if metadata is undefined',
|
||||
initialMetadata: undefined,
|
||||
expectedMetadata: new Metadata().set("authorization", "Bearer mock-token"),
|
||||
token: "mock-token"
|
||||
},
|
||||
{
|
||||
name: 'should add authorization if metadata exists but no authorization',
|
||||
initialMetadata: new Metadata().set("other-key", "other-value"),
|
||||
expectedMetadata: new Metadata().set("other-key", "other-value").set("authorization", "Bearer mock-token"),
|
||||
token: "mock-token"
|
||||
},
|
||||
{
|
||||
name: 'should not modify authorization if it already exists',
|
||||
initialMetadata: new Metadata().set("authorization", "Bearer initial-token"),
|
||||
expectedMetadata: new Metadata().set("authorization", "Bearer initial-token"),
|
||||
token: "mock-token"
|
||||
},
|
||||
];
|
||||
|
||||
scenarios.forEach(({ name, initialMetadata, expectedMetadata, token }) => {
|
||||
it(name, async () => {
|
||||
|
||||
const mockNext = jest.fn().mockImplementation(async function*() { });
|
||||
const mockRequest = {}; // Ersetze dies mit einem geeigneten Mock Request-Objekt
|
||||
|
||||
const mockMethodDescriptor: MethodDescriptor = {
|
||||
options: {idempotencyLevel: undefined},
|
||||
path: '',
|
||||
requestStream: false,
|
||||
responseStream: false,
|
||||
};
|
||||
|
||||
const mockCall: ClientMiddlewareCall<unknown, unknown> = {
|
||||
method: mockMethodDescriptor,
|
||||
requestStream: false, // Setze diese Werte entsprechend deiner Testbedingungen
|
||||
responseStream: false,
|
||||
request: mockRequest,
|
||||
next: mockNext,
|
||||
};
|
||||
const options: CallOptions = {
|
||||
metadata: initialMetadata
|
||||
};
|
||||
|
||||
await authMiddleware(token)(mockCall, options).next();
|
||||
|
||||
expect(mockNext).toHaveBeenCalledTimes(1);
|
||||
const actualMetadata = mockNext.mock.calls[0][1].metadata;
|
||||
expect(actualMetadata?.get('authorization')).toEqual(expectedMetadata.get('authorization'));
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -1,7 +1,7 @@
|
||||
import { CallOptions, ClientMiddlewareCall, Metadata } from "nice-grpc";
|
||||
import { CallOptions, ClientMiddleware, ClientMiddlewareCall, Metadata } from "nice-grpc";
|
||||
|
||||
export const authMiddleware = (token: string) =>
|
||||
async function* <Request, Response>(
|
||||
export function authMiddleware (token: string): ClientMiddleware {
|
||||
return async function* <Request, Response>(
|
||||
call: ClientMiddlewareCall<Request, Response>,
|
||||
options: CallOptions
|
||||
) {
|
||||
@@ -12,6 +12,7 @@ export const authMiddleware = (token: string) =>
|
||||
|
||||
return yield* call.next(call.request, options);
|
||||
};
|
||||
}
|
||||
|
||||
export const orgMetadata = (orgId: string) =>
|
||||
new Metadata({ "x-zitadel-orgid": orgId });
|
||||
|
||||
Reference in New Issue
Block a user