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