2 releases
0.1.1 | Oct 1, 2024 |
---|---|
0.1.0 | Sep 4, 2024 |
#360 in Authentication
2.5MB
9K
SLoC
slack-framework-rs
slack-framework-rs
is the library that the author uses to create the Slack App.
Since it is for its own use, it currently provides only limited features, but it is strictly omitted from app-specific processing, so I think others can use it as well. However, there are some processes that have not been tested very well, so there may be things that do not work or do not represent. Issues and Merge Requests on GitLab are welcome.
Features
- OAuth.
- Slash Commands processing. (That includes Verifying requests from Slack, but not yet supported except in the case of Slash Commands.)
- A client that can request a few Slack APIs.
- Some representations of Blocks.
TODO (what I know)
- OAuth token rotation.
- More APIs.
- More representations of Blocks.
Example
use slack_framework_rs::core as sc;
use slack_framework_rs::server as ss;
use slack_framework_rs::slack_api as ssa;
use slack_framework_rs::types as st;
/// The structure for implementing handler traits.
struct Handler;
#[tokio::main]
async fn main() -> Result<(), st::Error> {
// Server settings
let server_config = ss::Config::builder()
.sock("127.0.0.1:3000".parse().unwrap())
.build();
// Slack App settings
let slack_creds = sc::AppCredentials {
id: "Client ID".into(),
secret: "Client Secret".into(),
signing_secret: "Signing Secret".into(),
verification_token: "Verification Token".into(),
};
let slack_config = sc::Config {
timestamp_range: 300,
};
let slack = Slack::new(slack_creds, slack_config);
// HTTP Client
let client = reqwest::Client::new();
// Starts serving
Server::new(
server_config,
slack,
client,
Handler,
Handler,
Handler,
)
.serve()
.await
}
Implementations of handlers
/// Implements a process of slash commands.
impl ss::SlashCommandHandlerTrait for Handler {
async fn handle_slash_command(
&self,
_client: &Client,
body: SlashCommandBody,
) -> Result<st::SlashCommandResponse, ResponseError> {
println!("body: {body:?}");
Ok(st::SlashCommandResponse::empty().into())
}
}
/// Implements a process of OAuth.
impl ss::OauthHandlerTrait for Handler {
async fn handle_oauth(
&self,
_client: reqwest::Client,
body: OauthV2AccessResponse,
) -> Result<Option<OauthRedirectResponse>, ResponseError> {
println!("body: {body:?}");
Ok(None)
}
async fn take_oauth_token_from_team_id(&self, _team_id: &str) -> Result<String, ResponseError> {
Ok("token".into())
}
fn redirect_uri(&self) -> &str {
Ok("redirect_uri".into())
}
}
/// Implements to return the home page.
/// The home page should have an `Add to Slack` button.
impl HomeHandlerTrait for Handler {
async fn handle_home(&self) -> Result<Vec<u8>, ResponseError> {
const RESPONSE: &str = r#"<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title></title></head><body>ok</body></html>"#;
Ok(RESPONSE.into())
}
}
Documents
Dependencies
~15–27MB
~399K SLoC