Skip to content

Commit

Permalink
Merge pull request #2 from Codefend/cli
Browse files Browse the repository at this point in the history
cli: initial implementation
  • Loading branch information
Z-n-o-M authored Jan 4, 2023
2 parents dc503aa + fcac6aa commit ecafa42
Show file tree
Hide file tree
Showing 14 changed files with 139 additions and 28 deletions.
18 changes: 16 additions & 2 deletions .cspell.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
{
"version": "0.1",
"language": "en",
"words": ["degit", "esbuild", "Codefend", "octocat", "rmrf", "socio", "gjuchault"],
"words": [
"degit",
"esbuild",
"Codefend",
"octocat",
"rmrf",
"socio",
"codefendrc"
],
"flagWords": [],
"ignorePaths": ["package.json", "package-lock.json", "yarn.lock", "tsconfig.json", "node_modules/**"]
"ignorePaths": [
"package.json",
"package-lock.json",
"yarn.lock",
"tsconfig.json",
"node_modules/**"
]
}
2 changes: 2 additions & 0 deletions bin/codefend
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/usr/bin/env node
require("../build//cjs/index.js").cli.start();
10 changes: 7 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{
"name": "codefend",
"version": "0.0.0-development",
"bin": {
"codefend": "./bin/codefend"
},
"keywords": [
"obfuscator",
"code",
Expand Down Expand Up @@ -71,5 +74,8 @@
},
"overrides": {
"semver-regex": "3.1.4"
},
"dependencies": {
"commander": "^9.4.1"
}
}
71 changes: 71 additions & 0 deletions src/cli/CodefendCLI.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import { Command } from "commander";
import { obfuscate, logger } from "..";

import { ICodefendCLI } from "./ICodefendCLI";

export class CodefendCLI implements ICodefendCLI {
async start() {
const program = new Command();
program
.description("Defend Your Code By All Means Necessary. (Alpha)")
.option("-i, --init", "Create .codefendrc.json (configuration file)")
.option(
"-c, --check",
"Check .codefendrc.json for potential warnings/errors"
)
.option(
"-o, --obfuscate",
"Obfuscate your project (based on .codefendrc.json)"
)
.parse(process.argv);

logger.options.debug = true;
const from = "const l_var = 0;";
logger.log(
this.constructor.name.replace("Codefend", "").toLowerCase(),
"INFO",
`from: ${from}`
);
const to = obfuscate(from);
logger.log(
this.constructor.name.replace("Codefend", "").toLowerCase(),
"INFO",
`to: ${to}`
);
logger.options.debug = false;

const options = program.opts();

if (options.init) {
console.log("Creating .codefendrc.json...");
await this.delay(500);
console.log(
"Initialization completed. .codefendrc.json has been generated."
);
}

if (options.check) {
console.log("checking .codefendrc.json...");
await this.delay(500);
console.log("Check completed. 0 error(s) 0 warning(s) ");
}

if (options.obfuscate) {
console.log("Obfuscation started...");
await this.delay(500);
console.log("Obfuscation completed.");
}

if (options.help || !process.argv.slice(2).length) {
program.outputHelp();
}
}

delay(ms: number) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(true);
}, ms);
});
}
}
4 changes: 4 additions & 0 deletions src/cli/ICodefendCLI.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export interface ICodefendCLI {
start: () => void;
delay: (ms: number) => Promise<unknown>;
}
12 changes: 6 additions & 6 deletions src/core/mapper/CodefendMapper.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { CodefendLogger } from "../logger/CodefendLogger";
import { CodefendLogger } from "../../logger/CodefendLogger";
import {
ICodefendOptions,
ICodefendPredefinedWordOption,
Expand All @@ -7,12 +7,12 @@ import { ICodefendParserWord } from "../parser/ICodefendParser";
import { ICodefendMapper } from "./ICodefendMapper";

export class CodefendMapper implements ICodefendMapper {
options: ICodefendOptions | undefined;
options: ICodefendOptions;
logger: CodefendLogger;
scope: string;

constructor(options: ICodefendOptions, logger: CodefendLogger) {
this.setOptions(options);
this.options = options;
this.logger = logger;
this.scope = this.constructor.name.replace("Codefend", "");
}
Expand All @@ -26,7 +26,7 @@ export class CodefendMapper implements ICodefendMapper {
map: Record<string, string>,
prefix?: string
) {
prefix = prefix ?? this.options?.prefix;
prefix = prefix ?? this.options.prefix;
let sequence = Object.keys(map).length;
words.forEach((word) => {
if (map[word.value]) return;
Expand All @@ -48,7 +48,7 @@ export class CodefendMapper implements ICodefendMapper {
}

mapIgnoredWords(map: Record<string, string>, ignoredWords?: string[]) {
ignoredWords = ignoredWords ?? this.options?.ignoredWords ?? [];
ignoredWords = ignoredWords ?? this.options.ignoredWords ?? [];
ignoredWords.forEach((word: string) => {
map[word] = word;
});
Expand All @@ -59,7 +59,7 @@ export class CodefendMapper implements ICodefendMapper {
map: Record<string, string>,
predefinedWords?: ICodefendPredefinedWordOption[]
) {
predefinedWords = predefinedWords ?? this.options?.predefinedWords ?? [];
predefinedWords = predefinedWords ?? this.options.predefinedWords ?? [];
predefinedWords.forEach((predefinedWord) => {
map[predefinedWord.originalWord] = predefinedWord.targetWord;
});
Expand Down
6 changes: 3 additions & 3 deletions src/core/mapper/ICodefendMapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ export interface ICodefendMapper {
map: Record<string, string>,
prefix?: string
) => Record<string, string>;
sortMap: (map: Record<string, string>) => void;
sortMap: (map: Record<string, string>) => Record<string, string>;
mapIgnoredWords: (
map: Record<string, string>,
ignoredWords: string[]
ignoredWords?: string[]
) => Record<string, string>;
mapPredefinedWords: (
map: Record<string, string>,
predefinedWords: ICodefendPredefinedWordOption[]
predefinedWords?: ICodefendPredefinedWordOption[]
) => Record<string, string>;
}
8 changes: 4 additions & 4 deletions src/core/parser/CodefendParser.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { CodefendLogger } from "../logger/CodefendLogger";
import { CodefendLogger } from "../../logger/CodefendLogger";
import {
ICodefendOptions,
ICodefendRegexListOption,
} from "../options/ICodefendOptions";
import { ICodefendParser, ICodefendParserWord } from "./ICodefendParser";

export class CodefendParser implements ICodefendParser {
options: ICodefendOptions | undefined;
options: ICodefendOptions;
logger: CodefendLogger;

constructor(options: ICodefendOptions, logger: CodefendLogger) {
this.setOptions(options);
this.options = options;
this.logger = logger;
}

Expand All @@ -19,7 +19,7 @@ export class CodefendParser implements ICodefendParser {
}

parse(code: string, regexList?: ICodefendRegexListOption[]) {
regexList = regexList ?? this.options?.regexList;
regexList = regexList ?? this.options.regexList;
if (!regexList) {
throw new Error("Codefend: regexList required for parser");
}
Expand Down
2 changes: 1 addition & 1 deletion src/core/parser/ICodefendParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { ICodefendRegexListOption } from "../options/ICodefendOptions";
export interface ICodefendParser {
parse: (
code: string,
regexList: ICodefendRegexListOption[]
regexList?: ICodefendRegexListOption[]
) => ICodefendParserWord[];
}

Expand Down
2 changes: 1 addition & 1 deletion src/core/replacer/CodefendReplacer.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { CodefendLogger } from "../logger/CodefendLogger";
import { CodefendLogger } from "../../logger/CodefendLogger";
import { ICodefendReplacer } from "./ICodefendReplacer";

export class CodefendReplacer implements ICodefendReplacer {
Expand Down
18 changes: 14 additions & 4 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,23 @@
import { CodefendLogger } from "./core/logger/CodefendLogger";
import { CodefendCLI } from "./cli/CodefendCLI";
import { CodefendMapper } from "./core/mapper/CodefendMapper";
import { ICodefendMapper } from "./core/mapper/ICodefendMapper";
import {
ICodefendOptions,
defaultOptions,
} from "./core/options/ICodefendOptions";
import { CodefendParser } from "./core/parser/CodefendParser";
import { ICodefendParser } from "./core/parser/ICodefendParser";
import { CodefendReplacer } from "./core/replacer/CodefendReplacer";
import { ICodefendReplacer } from "./core/replacer/ICodefendReplacer";
import { CodefendLogger } from "./logger/CodefendLogger";

const logger = new CodefendLogger(defaultOptions);
export const logger = new CodefendLogger(defaultOptions);
export const cli = new CodefendCLI();

export const CodefendCore = {
export const CodefendCore: ICodefendCore = {
parser: new CodefendParser(defaultOptions, logger),
mapper: new CodefendMapper(defaultOptions, logger),
replacer: new CodefendReplacer(logger),
logger: logger,
};

export function obfuscate(
Expand All @@ -29,3 +33,9 @@ export function obfuscate(
const output = CodefendCore.replacer.replace(code, map);
return output;
}

export interface ICodefendCore {
parser: ICodefendParser;
mapper: ICodefendMapper;
replacer: ICodefendReplacer;
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import { ICodefendOptions } from "../options/ICodefendOptions";
import { ICodefendOptions } from "../core/options/ICodefendOptions";
import { ICodefendLogger } from "./ICodefendLogger";

export class CodefendLogger implements ICodefendLogger {
options: ICodefendOptions | undefined;
options: ICodefendOptions;

constructor(options: ICodefendOptions) {
this.setOptions(options);
this.options = options;
}

setOptions(options: ICodefendOptions) {
this.options = options;
}

log(scope: string, type: string, message: unknown) {
if (!this.options?.debug) return;
if (!this.options.debug) return;
console.log(`Codefend(${scope}):${type}:`, message);
}
}
File renamed without changes.

0 comments on commit ecafa42

Please sign in to comment.