func()

in network/gitlab.go [348:403]


func (n *GitLabClient) VerifyRunner(runner common.RunnerCredentials, systemID string) *common.VerifyRunnerResponse {
	request := common.VerifyRunnerRequest{
		Token:    runner.Token,
		SystemID: systemID,
	}

	var response common.VerifyRunnerResponse
	result, statusText, resp := n.doJSON(
		context.Background(),
		&runner,
		http.MethodPost,
		"runners/verify",
		http.StatusOK,
		RunnerTokenHeader(runner.Token),
		&request,
		&response,
	)
	if result == -1 {
		// if server is not able to return JSON, let's try plain text (the legacy response format)
		result, statusText, resp = n.doJSON(
			context.Background(),
			&runner,
			http.MethodPost,
			"runners/verify",
			http.StatusOK,
			RunnerTokenHeader(runner.Token),
			&request,
			nil,
		)
	}
	defer func() { n.handleResponse(context.TODO(), resp, false) }()

	switch result {
	case http.StatusOK:
		// this is expected due to fact that we ask for non-existing job
		if TokenIsCreatedRunnerToken(runner.Token) {
			runner.Log().Println("Verifying runner...", "is valid")
		} else {
			runner.Log().Println("Verifying runner...", "is alive")
		}
		return &response
	case http.StatusForbidden:
		if TokenIsCreatedRunnerToken(runner.Token) {
			runner.Log().Println("Verifying runner...", "is not valid")
		} else {
			runner.Log().WithField("status", statusText).Errorln("Verifying runner...", "is removed")
		}
		return nil
	case clientError:
		runner.Log().WithField("status", statusText).Errorln("Verifying runner...", "client error")
		return &response
	default:
		runner.Log().WithField("status", statusText).Errorln("Verifying runner...", "failed")
		return &response
	}
}