github.com/uvalib/orcid-access-ws@v0.0.0-20250612130209-7d062dbabf9d/orcidaccessws/handlers/get_orcid_attributes_handler.go (about)

     1  package handlers
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/gorilla/mux"
     6  	"github.com/uvalib/orcid-access-ws/orcidaccessws/authtoken"
     7  	"github.com/uvalib/orcid-access-ws/orcidaccessws/config"
     8  	"github.com/uvalib/orcid-access-ws/orcidaccessws/dao"
     9  	"github.com/uvalib/orcid-access-ws/orcidaccessws/logger"
    10  	"net/http"
    11  )
    12  
    13  // GetOrcidAttributes -- get orcid attributes handler
    14  func GetOrcidAttributes(w http.ResponseWriter, r *http.Request) {
    15  
    16  	vars := mux.Vars(r)
    17  	id := vars["id"]
    18  	token := r.URL.Query().Get("auth")
    19  
    20  	// parameters OK?
    21  	if isEmpty(id) || isEmpty(token) {
    22  		status := http.StatusBadRequest
    23  		encodeOrcidAttributesResponse(w, status, http.StatusText(status), nil)
    24  		return
    25  	}
    26  
    27  	// validate the token
    28  	if authtoken.Validate(config.Configuration.SharedSecret, token) == false {
    29  		status := http.StatusForbidden
    30  		encodeOrcidAttributesResponse(w, status, http.StatusText(status), nil)
    31  		return
    32  	}
    33  
    34  	// get the ORCID details
    35  	attributes, err := dao.Store.GetOrcidAttributesByCid(id)
    36  	if err != nil {
    37  		logger.Log(fmt.Sprintf("ERROR: %s", err.Error()))
    38  		status := http.StatusInternalServerError
    39  		encodeOrcidAttributesResponse(w, status,
    40  			fmt.Sprintf("%s (%s)", http.StatusText(status), err.Error()),
    41  			nil)
    42  		return
    43  	}
    44  
    45  	// we did not find the item, return 404
    46  	if attributes == nil || len(attributes) == 0 {
    47  		status := http.StatusNotFound
    48  		encodeOrcidAttributesResponse(w, status, http.StatusText(status), nil)
    49  		return
    50  	}
    51  
    52  	status := http.StatusOK
    53  	encodeOrcidAttributesResponse(w, status, http.StatusText(status), attributes)
    54  }
    55  
    56  //
    57  // end of file
    58  //