blib/lib/WebService/Mattermost/V4/API/Resource/Users.pm | |||
---|---|---|---|
Criterion | Covered | Total | % |
statement | 3 | 31 | 9.6 |
branch | n/a | ||
condition | n/a | ||
subroutine | 1 | 10 | 10.0 |
pod | 7 | 9 | 77.7 |
total | 11 | 50 | 22.0 |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | package WebService::Mattermost::V4::API::Resource::Users; 2: 3: # ABSTRACT: Wrapped API methods for the users API endpoints. 4: 5: use Moo; 6: 7: extends 'WebService::Mattermost::V4::API::Resource'; 8: with 'WebService::Mattermost::V4::API::Resource::Role::View::User'; 9: 10: ################################################################################ 11: 12: around [ qw(get_by_username check_mfa_by_username) ] => sub { 13: my $orig = shift; 14: my $self = shift; 15: my $username = shift; 16: 17: unless ($username) { 18: return $self->error_return('Invalid or missing username parameter'); 19: } 20: 21: return $self->$orig($username, @_); 22: }; 23: 24: around [ qw(get_by_email send_password_reset_email) ] => sub { 25: my $orig = shift; 26: my $self = shift; 27: my $email = shift; 28: 29: unless ($email) { 30: return $self->error_return('Invalid or missing email parameter'); 31: } 32: 33: return $self->$orig($email, @_); 34: }; 35: 36: around [ qw( 37: disable_personal_access_token 38: enable_personal_access_token 39: get_user_access_token 40: ) ] => sub { 41: my $orig = shift; 42: my $self = shift; 43: my $token = shift; 44: 45: unless ($token) { 46: return $self->error_return('Invalid or missing token parameter'); 47: } 48: 49: return $self->$orig($token, @_); 50: }; 51: 52: ################################################################################ 53: 54: sub login { 55: my $self = shift; 56: my $username = shift; 57: my $password = shift; 58: 59: return $self->_single_view_post({ 60: endpoint => 'login', 61: parameters => { 62: login_id => $username, 63: password => $password, 64: }, 65: }); 66: } 67: 68: sub create { 69: my $self = shift; 70: my $args = shift; 71: 72: return $self->_post({ 73: parameters => $args, 74: required => [ qw(username password email) ], 75: }); 76: } 77: 78: sub list { 79: my $self = shift; 80: my $args = shift; 81: 82: return $self->_get({ parameters => $args }); 83: } 84: 85: sub list_by_ids { 86: my $self = shift; 87: my $ids = shift; 88: 89: return $self->_call({ 90: endpoint => 'ids', 91: method => $self->post, 92: parameters => $ids, 93: }); 94: } 95: 96: sub list_by_usernames { 97: my $self = shift; 98: my $usernames = shift; 99: 100: return $self->_post({ 101: endpoint => 'usernames', 102: parameters => $usernames, 103: }); 104: } 105: 106: sub search { 107: my $self = shift; 108: my $args = shift; 109: 110: return $self->_post({ 111: endpoint => 'search', 112: parameters => $args, 113: required => [ 'term' ], 114: }); 115: } 116: 117: sub autocomplete { 118: my $self = shift; 119: my $args = shift; 120: 121: return $self->_get({ 122: endpoint => 'autocomplete', 123: parameters => $args, 124: required => [ 'name' ], 125: }); 126: } 127: 128: sub get_by_username { 129: my $self = shift; 130: my $username = shift; 131: 132: return $self->_single_view_get({ 133: endpoint => 'username/%s', 134: ids => [ $username ], 135: }); 136: } 137: 138: sub reset_password { 139: my $self = shift; 140: my $args = shift; 141: 142: return $self->_post({ 143: endpoint => 'password/reset', 144: parameters => $args, 145: required => [ qw(code new_password) ], 146: }); 147: } 148: 149: sub check_mfa_by_username { 150: my $self = shift; 151: my $username = shift; 152: 153: return $self->_post({ 154: endpoint => 'mfa', 155: parameters => { 156: login_id => $username, 157: }, 158: }); 159: } 160: 161: sub send_password_reset_email { 162: my $self = shift; 163: my $email = shift; 164: 165: return $self->_post({ 166: endpoint => 'password/reset/send', 167: parameters => { 168: email => $email, 169: }, 170: }); 171: } 172: 173: sub get_by_email { 174: my $self = shift; 175: my $email = shift; 176: 177: return $self->_get({ 178: endpoint => 'email/%s', 179: ids => [ $email ], 180: }); 181: } 182: 183: sub get_user_access_token { 184: my $self = shift; 185: my $id = shift; 186: 187: return $self->_get({ 188: endpoint => 'tokens/%s', 189: ids => [ $id ], 190: }); 191: } 192: 193: sub disable_personal_access_token { 194: my $self = shift; 195: my $id = shift; 196: 197: return $self->_post({ 198: endpoint => 'tokens/disable', 199: parameters => { 200: token => $id, 201: }, 202: }); 203: } 204: 205: sub enable_personal_access_token { 206: my $self = shift; 207: my $id = shift; 208: 209: return $self->_post({ 210: endpoint => 'tokens/enable', 211: parameters => { 212: token => $id, 213: }, 214: }); 215: } 216: 217: sub search_tokens { 218: my $self = shift; 219: my $term = shift; 220: 221: return $self->_post({ 222: endpoint => 'tokens/search', 223: parameters => { 224: term => $term, 225: }, 226: }); 227: } 228: 229: ################################################################################ 230: 231: 1; 232: 233: __END__ 234: 235: =pod 236: 237: =encoding UTF-8 238: 239: =head1 NAME 240: 241: WebService::Mattermost::V4::API::Resource::Users - Wrapped API methods for the users API endpoints. 242: 243: =head1 VERSION 244: 245: version 0.30 246: 247: =head1 DESCRIPTION 248: 249: =head2 USAGE 250: 251: use WebService::Mattermost; 252: 253: my $mm = WebService::Mattermost->new({ 254: authenticate => 1, 255: username => 'me@somewhere.com', 256: password => 'hunter2', 257: base_url => 'https://my.mattermost.server.com/api/v4/', 258: }); 259: 260: my $resource = $mm->api->users; 261: 262: =head2 METHODS 263: 264: =over 4 265: 266: =item C<login()> 267: 268: L<Authentication|https://api.mattermost.com/#tag/authentication> 269: 270: Log into the Mattermost server using a username and password. 271: 272: my $response = $resource->login({ 273: username => 'USERNAME-HERE', 274: password => 'PASSWORD-HERE', 275: }); 276: 277: =item C<create()> 278: 279: L<Create a user|https://api.mattermost.com/#tag/users%2Fpaths%2F~1users%2Fpost> 280: 281: Create a new user on the server. 282: 283: my $response = $resource->create({ 284: # Required parameters: 285: email => '...', 286: username => '...', 287: password => '...', 288: 289: # Optional parameters: 290: first_name => '...', 291: last_name => '...', 292: nickname => '...', 293: locale => '...', 294: props => { 295: # ... 296: }, 297: notify_props => { 298: # ... 299: }, 300: }); 301: 302: =item C<list()> 303: 304: L<Get users|https://api.mattermost.com/#tag/users%2Fpaths%2F~1users%2Fget> 305: 306: my $response = $resource->list({ 307: # Optional parameters: 308: page => 0, 309: per_page => 60, 310: in_team => 'TEAM-ID-HERE', 311: not_in_team => 'TEAM-ID-HERE', 312: in_channel => 'CHANNEL-ID-HERE', 313: not_in_channel => 'CHANNEL-ID-HERE', 314: without_team => \1, 315: sort => 'STRING', 316: }); 317: 318: =item C<list_by_ids()> 319: 320: L<Get users by IDs|https://api.mattermost.com/#tag/users%2Fpaths%2F~1users~1ids%2Fpost> 321: 322: Takes an ArrayRef of IDs as its only argument. 323: 324: my $users = $resource->list_by_ids([ qw( 325: USER-ID-1 326: USER-ID-2 327: USER-ID-3 328: ) ]); 329: 330: =item C<list_by_usernames()> 331: 332: L<Get by usernames|https://api.mattermost.com/#tag/users%2Fpaths%2F~1users~1usernames%2Fpost> 333: 334: Takes an ArrayRef of usernames. 335: 336: my $users = $resource->list_by_usernames([ qw( 337: USERNAME-1 338: USERNAME-2 339: USERNAME-3 340: ) ]); 341: 342: =item C<search()> 343: 344: L<Search users|https://api.mattermost.com/#tag/users%2Fpaths%2F~1users~1search%2Fpost> 345: 346: my $response = $resource->search({ 347: # Required parameters: 348: term => 'SEARCH-TERM-HERE', 349: 350: # Optional parameters: 351: team_id => 'TEAM-ID-HERE', 352: not_in_team_id => 'TEAM-ID-HERE', 353: in_channel_id => 'CHANNEL-ID-HERE', 354: not_in_channel_id => 'CHANNEL-ID-HERE', 355: allow_inactive => \1, # or \0 - true/false 356: without_team => \1, 357: sort => 'STRING', 358: }); 359: 360: =item C<autocomplete()> 361: 362: L<Autocomplete users|https://api.mattermost.com/#tag/users%2Fpaths%2F~1users~1autocomplete%2Fget> 363: 364: my $response = $resource->autocomplete({ 365: # Required parameters: 366: name => 'USERNAME-HERE', 367: 368: # Optional parameters: 369: team_id => 'TEAM-ID-HERE', 370: channel_id => 'CHANNEL-ID-HERE', 371: }); 372: 373: =item C<get_by_username()> 374: 375: L<Get a user by username|https://api.mattermost.com/#tag/users%2Fpaths%2F~1users~1username~1%7Busername%7D%2Fget> 376: 377: Get a user by their username (exact match only). 378: 379: my $response = $resource->get_by_username('mike'); 380: 381: =item C<reset_password_by_id()> 382: 383: L<Reset password|https://api.mattermost.com/#tag/users%2Fpaths%2F~1users~1password~1reset%2Fpost> 384: 385: Reset a user's password. Requires a recovery code. 386: 387: my $response = $resource->reset_password({ 388: new_password => 'hunter2', 389: code => 1234 390: }); 391: 392: =item C<check_mfa_by_username()> 393: 394: L<Check MFA|https://api.mattermost.com/#tag/users%2Fpaths%2F~1users~1mfa%2Fpost> 395: 396: Check whether a user requires multi-factor auth by username or email. 397: 398: my $response = $resource->check_mfa_by_username('USERNAME-HERE'); 399: 400: =item C<send_password_reset_email()> 401: 402: L<Send password reset email|https://api.mattermost.com/#tag/users%2Fpaths%2F~1users~1password~1reset~1send%2Fpost> 403: 404: Send a password reset email. 405: 406: my $response = $resource->send_password_reset_email('me@somewhere.com'); 407: 408: =item C<get_by_email()> 409: 410: L<Get a user by email|https://api.mattermost.com/#tag/users%2Fpaths%2F~1users~1email~1%7Bemail%7D%2Fget> 411: 412: Get a user by email address. 413: 414: my $response = $resource->get_by_email('me@somewhere.com'); 415: 416: =back 417: 418: =head1 AUTHOR 419: 420: Mike Jones <mike@netsplit.org.uk> 421: 422: =head1 COPYRIGHT AND LICENSE 423: 424: This software is Copyright (c) 2023 by Mike Jones. 425: 426: This is free software, licensed under: 427: 428: The MIT (X11) License 429: 430: =cut 431: |