|
| 1 | +import graphql.Directives; |
1 | 2 | import graphql.schema.GraphQLSchema; |
| 3 | +import graphql.schema.idl.DirectiveInfo; |
2 | 4 | import graphql.schema.idl.SchemaGenerator; |
3 | 5 | import graphql.schema.idl.SchemaParser; |
4 | 6 | import graphql.schema.idl.SchemaPrinter; |
5 | 7 | import graphql.schema.idl.TypeDefinitionRegistry; |
6 | 8 | import graphql.util.Anonymizer; |
7 | 9 | import picocli.CommandLine; |
8 | 10 |
|
| 11 | +import java.io.BufferedReader; |
9 | 12 | import java.io.File; |
| 13 | +import java.io.InputStreamReader; |
10 | 14 | import java.nio.file.Files; |
| 15 | +import java.util.ArrayList; |
| 16 | +import java.util.List; |
| 17 | +import java.util.Scanner; |
| 18 | +import java.util.StringTokenizer; |
11 | 19 | import java.util.concurrent.Callable; |
12 | 20 |
|
13 | 21 | import static picocli.CommandLine.*; |
14 | 22 |
|
15 | 23 | @Command(name = "graphql-anonymizer", mixinStandardHelpOptions = true, version = "graphql-anonymizer 1.0", |
16 | | - description = "Aononymize GraphQL schemas and queries.") |
| 24 | + description = "Anonymize GraphQL schemas and queries") |
17 | 25 | public class Main implements Callable<String> { |
18 | 26 |
|
19 | 27 |
|
20 | | - @Parameters(index = "0", description = "The GraphQL schema file") |
21 | | - private File file; |
| 28 | + @Option(names = {"-s", "--schema"}, description = "The GraphQL schema file", paramLabel = "schema-file") |
| 29 | + private File schemaFile; |
22 | 30 |
|
23 | | -// @Option(names = {"-a", "--algorithm"}, description = "MD5, SHA-1, SHA-256, ...") |
24 | | -// private String algorithm = "MD5"; |
| 31 | + @Option(names = {"-v", "--verbose"}, description = "print out more details", defaultValue = "false") |
| 32 | + private boolean verbose; |
25 | 33 |
|
26 | 34 | @Override |
27 | 35 | public String call() throws Exception { |
28 | | - String schema = Files.readString(file.toPath()); |
29 | | - TypeDefinitionRegistry typeDefinitionRegistry = new SchemaParser().parse(schema); |
| 36 | + String sdl; |
| 37 | + if (schemaFile != null) { |
| 38 | + sdl = Files.readString(schemaFile.toPath()); |
| 39 | + } else { |
| 40 | + List<String> lines = new ArrayList<>(); |
| 41 | + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); |
| 42 | + Scanner scanner = new Scanner(System.in); |
| 43 | + while (scanner.hasNext()) { |
| 44 | + lines.add(scanner.nextLine()); |
| 45 | + } |
| 46 | + sdl = String.join("\n", lines); |
| 47 | + } |
| 48 | + if (verbose) { |
| 49 | + System.out.printf("Loaded schema: %s%n", sdl); |
| 50 | + } |
| 51 | + TypeDefinitionRegistry typeDefinitionRegistry = new SchemaParser().parse(sdl); |
30 | 52 | GraphQLSchema graphQLSchema = new SchemaGenerator().makeExecutableSchema(typeDefinitionRegistry, MockedWiring.MOCKED_WIRING); |
31 | 53 | GraphQLSchema anonSchema = Anonymizer.anonymizeSchema(graphQLSchema); |
32 | | - String printedSchema = new SchemaPrinter().print(anonSchema); |
| 54 | + SchemaPrinter.Options options = SchemaPrinter.Options.defaultOptions(); |
| 55 | + options = options.includeDirectives(graphQLDirective -> !DirectiveInfo.isGraphqlSpecifiedDirective(graphQLDirective)); |
| 56 | + String printedSchema = new SchemaPrinter(options).print(anonSchema); |
33 | 57 | System.out.println(printedSchema); |
34 | 58 | return printedSchema; |
35 | 59 | } |
|
0 commit comments