Skip to content

Instantly share code, notes, and snippets.

@hohonuuli
Last active September 19, 2020 00:00
Show Gist options
  • Save hohonuuli/9d42b2a1939cc1e6443d30114b2c3bd6 to your computer and use it in GitHub Desktop.
Save hohonuuli/9d42b2a1939cc1e6443d30114b2c3bd6 to your computer and use it in GitHub Desktop.
Code for a Medium article
package firebase.jwt;
import javax.inject.Inject;
import com.google.firebase.auth.FirebaseAuthException;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.annotation.*;
import io.micronaut.security.annotation.Secured;
import io.micronaut.security.authentication.UserDetails;
import io.micronaut.security.rules.SecurityRule;
import io.micronaut.security.token.jwt.generator.JwtTokenGenerator;
import java.util.Collections;
import java.util.Optional;
@Controller("/firebase")
@Secured(SecurityRule.IS_ANONYMOUS)
public class FirebaseController {
JwtTokenGenerator jwtTokenGenerator;
Firebase firebase;
@Inject
public FirebaseController(JwtTokenGenerator jwtTokenGenerator, Firebase firebase) {
this.jwtTokenGenerator = jwtTokenGenerator;
this.firebase = firebase;
}
@Get(uri="/", produces="text/plain")
@Secured(SecurityRule.IS_AUTHENTICATED)
public String index() {
return "Example Response";
}
@Post("/auth")
public Optional<AuthHeader> auth(HttpRequest<?> request) throws FirebaseAuthException {
var auth = request.getHeaders().get("Authorization");
var opt = AuthHeader.parse(auth);
var out = Optional.<AuthHeader>empty();
if (opt.isPresent()) {
var authHeader = opt.get();
var firebaseToken = firebase.verifyIdToken(authHeader.getToken());
var userDetails = new UserDetails(firebaseToken.getName(),
Collections.emptyList(),
firebaseToken.getClaims());
var jwt = jwtTokenGenerator.generateToken(userDetails, 3600);
out = jwt.map(t -> new AuthHeader("Bearer", t));
}
return out;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment