1 /**
2 * Copyright (c) 2013-2023, jcabi.com
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met: 1) Redistributions of source code must retain the above
8 * copyright notice, this list of conditions and the following
9 * disclaimer. 2) Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer in the documentation and/or other materials provided
12 * with the distribution. 3) Neither the name of the jcabi.com nor
13 * the names of its contributors may be used to endorse or promote
14 * products derived from this software without specific prior written
15 * permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
19 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28 * OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30 package com.jcabi.github;
31
32 import java.lang.annotation.Documented;
33 import java.lang.annotation.ElementType;
34 import java.lang.annotation.Retention;
35 import java.lang.annotation.RetentionPolicy;
36 import java.lang.annotation.Target;
37
38 /**
39 * Annotates an integration test case to indicate required OAuth scopes to run
40 * such case.
41 * @todo #975:30min Now all IT cases are annotated with OAuthScope annotation
42 * to marked down its required scopes. A checker needs to be implemented to
43 * check if the supplied account can fulfill the IT case requirement before
44 * it is run and make the case fail if the required OAuth scopes is not
45 * present.
46 * @author Jason Wong (super132j@yahoo.com)
47 * @version $Id: 3612c716aa4e67efb7b288924b436df85cb5912b $
48 * @see <a href="https://developer.github.com/v3/oauth/#scopes">Github OAuth
49 * scopes</a>
50 */
51 @Documented
52 @Retention(RetentionPolicy.RUNTIME)
53 @Target(ElementType.TYPE)
54 public @interface OAuthScope {
55 /**
56 * The Github OAuth scopes required.
57 */
58 Scope[] value();
59
60 /**
61 * The enum represents the available OAuth scopes.
62 */
63 public enum Scope {
64 /**
65 * Represents "no scope" scope.
66 */
67 NO_SCOPE,
68 /**
69 * Represents "user" scope.
70 */
71 USER,
72 /**
73 * Represents "user:email" scope.
74 */
75 USER_EMAIL,
76 /**
77 * Represents "user:follow" scope.
78 */
79 USER_FOLLOW,
80 /**
81 * Represents "public_repo" scope.
82 */
83 PUBLIC_REPO,
84 /**
85 * Represents "repo" scope.
86 */
87 REPO,
88 /**
89 * Represents "repo_deployment" scope.
90 */
91 REPO_DEPLOYMENT,
92 /**
93 * Represents "repo_status" scope.
94 */
95 REPO_STATUS,
96 /**
97 * Represents "delete_repo" scope.
98 */
99 DELETE_REPO,
100 /**
101 * Represents "notifications" scope.
102 */
103 NOTIFICATIONS,
104 /**
105 * Represents "gist" scope.
106 */
107 GIST,
108 /**
109 * Represents "read:repo_hook" scope.
110 */
111 READ_REPO_HOOK,
112 /**
113 * Represents "write:repo_hook" scope.
114 */
115 WRITE_REPO_HOOK,
116 /**
117 * Represents "admin:repo_hook" scope.
118 */
119 ADMIN_REPO_HOOK,
120 /**
121 * Represents "admin:org_hook" scope.
122 */
123 ADMIN_ORG_HOOK,
124 /**
125 * Represents "read:org" scope.
126 */
127 READ_ORG,
128 /**
129 * Represents "write:org" scope.
130 */
131 WRITE_ORG,
132 /**
133 * Represents "admin:org" scope.
134 */
135 ADMIN_ORG,
136 /**
137 * Represents "read:public_key" scope.
138 */
139 READ_PUBLIC_KEY,
140 /**
141 * Represents "write:public_key" scope.
142 */
143 WRITE_PUBLIC_KEY,
144 /**
145 * Represents "admin:public_key" scope.
146 */
147 ADMIN_PUBLIC_KEY;
148 }
149 }