View Javadoc
1   package com.atlassian.plugin;
2   
3   import com.google.common.collect.ImmutableSet;
4   
5   import java.util.Set;
6   
7   import static com.google.common.base.Preconditions.checkNotNull;
8   import static java.util.Optional.ofNullable;
9   
10  /**
11   * @since 3.0
12   */
13  public final class Permissions {
14      /**
15       * <p>Represents all the permissions in one. This is useful for plugins before version 3 which by default require all
16       * permissions.
17       * <p>It is not a good idea to use this as a plugin developer, as this is a way internally to define permissions for
18       * legacy plugins.
19       */
20      public static final String ALL_PERMISSIONS = "all_permissions";
21  
22      /**
23       * A permission to execute java code. You will need this permission if as a plugin developers you write your own
24       * java components for your plugin, be it a simple service, a servlet, etc.
25       */
26      public static final String EXECUTE_JAVA = "execute_java";
27  
28      /**
29       * A permission to create system modules.
30       */
31      public static final String CREATE_SYSTEM_MODULES = "create_system_modules";
32  
33      /**
34       * <p>A permission to generate arbitrary HTML.
35       * <p>Generating arbitrary HTML can be a security threat hence why it would require such permission.
36       */
37      public static final String GENERATE_ANY_HTML = "generate_any_html";
38  
39      private Permissions() {
40      }
41  
42      public static Set<String> getRequiredPermissions(Class<?> type) {
43          final Class<RequirePermission> annotation = RequirePermission.class;
44          if (type != null && type.isAnnotationPresent(annotation)) {
45              return ImmutableSet.copyOf(type.getAnnotation(annotation).value());
46          }
47          return ImmutableSet.of();
48      }
49  
50      public static Plugin addPermission(Plugin plugin, String permission, InstallationMode mode) {
51          checkNotNull(plugin);
52  
53          getPluginInformation(plugin).setPermissions(
54                  ImmutableSet.<PluginPermission>builder()
55                          .addAll(getPluginInformation(plugin).getPermissions())
56                          .add(new PluginPermission(permission, mode))
57                          .build());
58          return plugin;
59      }
60  
61      private static PluginInformation getPluginInformation(Plugin plugin) {
62          return ofNullable(plugin.getPluginInformation()).orElseGet(PluginInformation::new);
63      }
64  }