mandarineorg / mandarinets

Mandarine.TS is a typescript, decorator-driven framework that allows you to create server-side applications. Mandarine.TS provides a range of built-in solutions such as Dependency Injection, Components, ORM and more. Under its umbrella, Mandarine.TS has 4 modules: Core, Data, Security and MVC, these modules will offer you the requirements to build a Mandarine-powered application.

Home Page:https://www.mandarinets.org/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Overriding session middleware fails

andreespirela opened this issue · comments

Overriding session middleware fails.

Minimal reproduction:

import { MandarineCore, Mandarine, Override, MandarineSecurity, Controller, GET } from "https://deno.land/x/mandarinets@v2.1.1/mod.ts";
import { MandarineSessionContainer } from "https://deno.land/x/mandarinets@v2.1.1/main-core/mandarine-native/sessions/mandarineSessionContainer.ts";

@Override()
class WebMvcConfigurer extends Mandarine.Native.WebMvcConfigurer {
  getSessionContainer(): MandarineSessionContainer {
    return new MandarineSessionContainer();
  }
}

@Controller()
class Test {
  @GET("/hello")
  hello() {
    return "Hello, world!";
  }
}

new MandarineCore().MVC().run();

Stacktrace:

TypeError: Cannot use 'in' operator to search for '0' in undefined
    at new KeyStack (keyStack.ts:33:12)
    at Function.getCookieForSession (sessions.util.ts:35:31)
    at SessionMiddleware.createSessionCookie (sessionMiddleware.ts:83:78)
    at MandarineMvcFrameworkStarter.preRequestInternalMiddlewares (mandarineMvcFrameworkStarter.ts:80:44)
    at responseHandler (mandarineMvcFrameworkStarter.ts:156:18)
    at dispatch (middleware.ts:41:13)
    at router.ts:866:20
    at dispatch (middleware.ts:41:13)
    at composedMiddleware (middleware.ts:44:12)
    at dispatch (router.ts:872:28)

The reason why this is happening is because changeSessionContainer called in the proxy is not setting the keys property. It is set when Mandarine is initialized but after that it is ignored.