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