|
| 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