This file is indexed.

/usr/share/pkg-perl-tools/invite-github is in pkg-perl-tools 0.42.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/usr/bin/perl

use warnings;
use strict;

use Getopt::Long;
use LWP::UserAgent;
use JSON::XS;

=head1 NAME

dpt-invite-github - Invite someone to a GitHub organization

=head1 SYNOPSIS

    dpt invite-github [option...] {github-username}

=head1 DESCRIPTION

B<dpt invite-github> can be used for inviting people to become members
of a GitHub organization. You can set the organization name through
C<DPT_GITHUB_ORGNAME> environment variable (defaults to I<pkg-perl-tools>).

This script needs the C<DPT_GITHUB_OAUTH> environment variable,
which can be set in F<~/.dpt.conf> or F<~/.config/dpt.conf>.
Cf. L<dpt-github-oauth(1)> and L<dpt-config(5)>.

You need to have write access to the C<admin:org> scope to be able to
manage organization memberships. Please, make sure the token you use
has that scope in L<https://github.com/settings/tokens>.

=head1 OPTIONS

=over

=item B<--role> I<name>

This option sets the role for the user. Valid roles are I<admin> or I<member>,
which is the default.

=item B<--force>

Use this option if the GitHub user is already a member of the organization
and you want to change their role anyway.

=back

=cut

my $opt_force;
my $opt_role;

GetOptions(
    'role=s' => \$opt_role,
    'force!' => \$opt_force,
) or exit 1;

my ($gh_user) = @ARGV;
die "GitHub user name is required\n" unless defined $gh_user;

die "DPT_GITHUB_OAUTH environment variable must be set\n"
    unless defined $ENV{DPT_GITHUB_OAUTH}
    and $ENV{DPT_GITHUB_OAUTH} =~ /\w+/;

my $orgname = $ENV{DPT_GITHUB_ORGNAME} || 'pkg-perl-tools';
my $api = "https://api.github.com/orgs/$orgname/memberships/$gh_user";
my $content_type = 'application/vnd.github.v3+json';
my %headers = (
    'Authorization' => "token $ENV{DPT_GITHUB_OAUTH}",
    'Content-Type'  => $content_type,
    'Accept'        => $content_type,
);

sub check_membership {
    my ($res) = @_;

    my $json = decode_json($res->decoded_content);
    if ( $res->is_success ) {
        my $state = $json->{state};
        my $role  = $json->{role};
        print "User $gh_user is already a member of $orgname with state $state and role $role\n";
    }
    else {
        my $message = $json->{message};
        die "Failed $gh_user membership status: $message\n";
    }
}

my $ua = LWP::UserAgent->new();
my $res = $ua->get( $api, %headers );

print "User $gh_user is not a member of $orgname yet...\n"
    if $res->code == 404;

$headers{Content} = encode_json({ role => $opt_role })
    if $opt_role;

$res = $ua->put( $api, %headers )
    if $res->code == 404 or $opt_force;

check_membership($res);


=head1 LICENSE AND COPYRIGHT

=over

=item Copyright 2016 Alex Muntada.

=back

This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.

=cut