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 }