Skip to content
Merged
3 changes: 2 additions & 1 deletion apps/app/.eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ module.exports = {
'src/server/routes/apiv3/app-settings/**',
'src/server/routes/apiv3/page/**',
'src/server/routes/apiv3/*.ts',
'src/server/routes/apiv3/*.js',
'src/server/service/*.ts',
'src/server/service/*.js',
],
settings: {
// resolve path aliases by eslint-import-resolver-typescript
Expand Down
68 changes: 32 additions & 36 deletions apps/app/src/server/service/acl.integ.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,24 @@ import type { MockInstance } from 'vitest';
import { aclService } from './acl';
import { configManager } from './config-manager';


describe('AclService', () => {
test("has consts 'isLabeledStatement'", () => {
expect(aclService.labels.SECURITY_RESTRICT_GUEST_MODE_DENY).toBe('Deny');
expect(aclService.labels.SECURITY_RESTRICT_GUEST_MODE_READONLY).toBe('Readonly');
expect(aclService.labels.SECURITY_RESTRICT_GUEST_MODE_READONLY).toBe(
'Readonly',
);
expect(aclService.labels.SECURITY_REGISTRATION_MODE_OPEN).toBe('Open');
expect(aclService.labels.SECURITY_REGISTRATION_MODE_RESTRICTED).toBe('Restricted');
expect(aclService.labels.SECURITY_REGISTRATION_MODE_RESTRICTED).toBe(
'Restricted',
);
expect(aclService.labels.SECURITY_REGISTRATION_MODE_CLOSED).toBe('Closed');
});
});

describe('AclService test', () => {

const initialEnv = process.env;

beforeAll(async() => {
beforeAll(async () => {
await configManager.loadConfigs();
});

Expand All @@ -27,8 +29,7 @@ describe('AclService test', () => {
});

describe('isAclEnabled()', () => {

test('to be false when FORCE_WIKI_MODE is undefined', async() => {
test('to be false when FORCE_WIKI_MODE is undefined', async () => {
delete process.env.FORCE_WIKI_MODE;

// reload
Expand All @@ -41,7 +42,7 @@ describe('AclService test', () => {
expect(result).toBe(true);
});

test('to be false when FORCE_WIKI_MODE is dummy string', async() => {
test('to be false when FORCE_WIKI_MODE is dummy string', async () => {
process.env.FORCE_WIKI_MODE = 'dummy string';

// reload
Expand All @@ -54,7 +55,7 @@ describe('AclService test', () => {
expect(result).toBe(true);
});

test('to be true when FORCE_WIKI_MODE=private', async() => {
test('to be true when FORCE_WIKI_MODE=private', async () => {
process.env.FORCE_WIKI_MODE = 'private';

// reload
Expand All @@ -67,7 +68,7 @@ describe('AclService test', () => {
expect(result).toBe(true);
});

test('to be false when FORCE_WIKI_MODE=public', async() => {
test('to be false when FORCE_WIKI_MODE=public', async () => {
process.env.FORCE_WIKI_MODE = 'public';

// reload
Expand All @@ -79,13 +80,10 @@ describe('AclService test', () => {
expect(wikiMode).toBe('public');
expect(result).toBe(false);
});

});


describe('isWikiModeForced()', () => {

test('to be false when FORCE_WIKI_MODE is undefined', async() => {
test('to be false when FORCE_WIKI_MODE is undefined', async () => {
delete process.env.FORCE_WIKI_MODE;

// reload
Expand All @@ -98,7 +96,7 @@ describe('AclService test', () => {
expect(result).toBe(false);
});

test('to be false when FORCE_WIKI_MODE is dummy string', async() => {
test('to be false when FORCE_WIKI_MODE is dummy string', async () => {
process.env.FORCE_WIKI_MODE = 'dummy string';

// reload
Expand All @@ -111,7 +109,7 @@ describe('AclService test', () => {
expect(result).toBe(false);
});

test('to be true when FORCE_WIKI_MODE=private', async() => {
test('to be true when FORCE_WIKI_MODE=private', async () => {
process.env.FORCE_WIKI_MODE = 'private';

// reload
Expand All @@ -124,7 +122,7 @@ describe('AclService test', () => {
expect(result).toBe(true);
});

test('to be false when FORCE_WIKI_MODE=public', async() => {
test('to be false when FORCE_WIKI_MODE=public', async () => {
process.env.FORCE_WIKI_MODE = 'public';

// reload
Expand All @@ -136,19 +134,17 @@ describe('AclService test', () => {
expect(wikiMode).toBe('public');
expect(result).toBe(true);
});

});


describe('isGuestAllowedToRead()', () => {
let getConfigSpy: MockInstance<typeof configManager.getConfig>;

beforeEach(async() => {
beforeEach(async () => {
// prepare spy for ConfigManager.getConfig
getConfigSpy = vi.spyOn(configManager, 'getConfig');
});

test('to be false when FORCE_WIKI_MODE=private', async() => {
test('to be false when FORCE_WIKI_MODE=private', async () => {
process.env.FORCE_WIKI_MODE = 'private';

// reload
Expand All @@ -158,11 +154,13 @@ describe('AclService test', () => {

const wikiMode = configManager.getConfig('security:wikiMode');
expect(wikiMode).toBe('private');
expect(getConfigSpy).not.toHaveBeenCalledWith('security:restrictGuestMode');
expect(getConfigSpy).not.toHaveBeenCalledWith(
'security:restrictGuestMode',
);
expect(result).toBe(false);
});

test('to be true when FORCE_WIKI_MODE=public', async() => {
test('to be true when FORCE_WIKI_MODE=public', async () => {
process.env.FORCE_WIKI_MODE = 'public';

// reload
Expand All @@ -172,22 +170,23 @@ describe('AclService test', () => {

const wikiMode = configManager.getConfig('security:wikiMode');
expect(wikiMode).toBe('public');
expect(getConfigSpy).not.toHaveBeenCalledWith('security:restrictGuestMode');
expect(getConfigSpy).not.toHaveBeenCalledWith(
'security:restrictGuestMode',
);
expect(result).toBe(true);
});

/* eslint-disable indent */
describe.each`
restrictGuestMode | expected
${undefined} | ${false}
${'Deny'} | ${false}
${'Readonly'} | ${true}
${'Open'} | ${false}
${'Restricted'} | ${false}
${'closed'} | ${false}
restrictGuestMode | expected
${undefined} | ${false}
${'Deny'} | ${false}
${'Readonly'} | ${true}
${'Open'} | ${false}
${'Restricted'} | ${false}
${'closed'} | ${false}
`('to be $expected', ({ restrictGuestMode, expected }) => {
test(`when FORCE_WIKI_MODE is undefined and 'security:restrictGuestMode' is '${restrictGuestMode}`, async() => {

test(`when FORCE_WIKI_MODE is undefined and 'security:restrictGuestMode' is '${restrictGuestMode}`, async () => {
// reload
await configManager.loadConfigs();

Expand All @@ -210,8 +209,5 @@ describe('AclService test', () => {
expect(result).toBe(expected);
});
});

});


});
12 changes: 5 additions & 7 deletions apps/app/src/server/service/acl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,17 @@ import { configManager } from './config-manager';
const logger = loggerFactory('growi:service:AclService');

export interface AclService {
get labels(): { [key: string]: string },
isAclEnabled(): boolean,
isWikiModeForced(): boolean,
isGuestAllowedToRead(): boolean,
getGuestModeValue(): string,
get labels(): { [key: string]: string };
isAclEnabled(): boolean;
isWikiModeForced(): boolean;
isGuestAllowedToRead(): boolean;
getGuestModeValue(): string;
}

/**
* the service class of AclService
*/
class AclServiceImpl implements AclService {

get labels() {
return {
SECURITY_RESTRICT_GUEST_MODE_DENY: 'Deny',
Expand Down Expand Up @@ -73,7 +72,6 @@ class AclServiceImpl implements AclService {
? this.labels.SECURITY_RESTRICT_GUEST_MODE_READONLY
: this.labels.SECURITY_RESTRICT_GUEST_MODE_DENY;
}

}

export const aclService = new AclServiceImpl();
Loading
Loading