From 5d7c19e06876df87c8a86e6d73cc4bf43d9e0c33 Mon Sep 17 00:00:00 2001 From: Chen Wang Date: Mon, 11 Sep 2023 14:17:24 -0500 Subject: [PATCH 1/3] 419 authenticator against keycloak (#420) * follow cilogon example * add keycloak * keycloak is working now * changelog * revert accidental change * replace the default conf to clowder * typo * use the correct group * check roles also * provide examples of filtering by grouops and roles --------- Co-authored-by: Luigi Marini --- CHANGELOG.md | 1 + app/services/KeycloakProvider.scala | 103 ++++++++++++++++++ conf/play.plugins | 1 + conf/securesocial.conf | 12 ++ .../images/providers/keycloak.png | Bin 0 -> 2924 bytes 5 files changed, 117 insertions(+) create mode 100644 app/services/KeycloakProvider.scala create mode 100644 public/securesocial/images/providers/keycloak.png diff --git a/CHANGELOG.md b/CHANGELOG.md index ba104cea9..22577f118 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Extractors can now specify an extractor_key and an owner (email address) when sending a registration or heartbeat to Clowder that will restrict use of that extractor to them. - Added a dropdown menu to select all spaces, your spaces and also the spaces you have access to. [#374](https://github.com/clowder-framework/clowder/issues/374) +- Keycloak provider with secure social [#419](https://github.com/clowder-framework/clowder/issues/419) - Documentation on how to do easy testing of pull requests ## Fixed diff --git a/app/services/KeycloakProvider.scala b/app/services/KeycloakProvider.scala new file mode 100644 index 000000000..dab72cda6 --- /dev/null +++ b/app/services/KeycloakProvider.scala @@ -0,0 +1,103 @@ +package services + +import play.api.libs.ws.WS +import play.api.{Application, Logger} +import play.api.libs.json.JsObject +import securesocial.core._ +import scala.collection.JavaConverters._ + + +/** + * A Keycloak OAuth2 Provider + */ +class KeycloakProvider(application: Application) extends OAuth2Provider(application) { + val Error = "error" + val Message = "message" + val Type = "type" + val Sub = "sub" + val Name = "name" + val GivenName = "given_name" + val FamilyName = "family_name" + // todo: picture wont work + val Picture = "picture" + val Email = "email" + val Groups = "groups" + + override def id = KeycloakProvider.Keycloak + + def fillProfile(user: SocialUser): SocialUser = { + val UserInfoApi = loadProperty("userinfoUrl").getOrElse(throwMissingPropertiesException()) + val accessToken = user.oAuth2Info.get.accessToken + val promise = WS.url(UserInfoApi.toString).withHeaders(("Authorization", "Bearer " + accessToken)).get() + + try { + val response = awaitResult(promise) + val me = response.json + Logger.debug("Got back from Keycloak : " + me.toString()) + (me \ Error).asOpt[JsObject] match { + case Some(error) => + val message = (error \ Message).as[String] + val errorType = ( error \ Type).as[String] + Logger.error("[securesocial] error retrieving profile information from Keycloak. Error type = %s, message = %s" + .format(errorType,message)) + throw new AuthenticationException() + case _ => + val userId = (me \ Sub).as[String] + val firstName = (me \ GivenName).asOpt[String] + val lastName = (me \ FamilyName).asOpt[String] + val fullName = (me \ Name).asOpt[String] + val avatarUrl = ( me \ Picture).asOpt[String] + val email = ( me \ Email).asOpt[String] + val groups = ( me \ Groups).asOpt[List[String]] + val roles = ( me \ "resource_access" \ "account" \ "roles").asOpt[List[String]] + (application.configuration.getList("securesocial.keycloak.groups"), groups) match { + case (Some(conf), Some(keycloak)) => { + val conflist = conf.unwrapped().asScala.toList + if (keycloak.intersect(conflist).isEmpty) { + throw new AuthenticationException() + } + } + case (Some(_), None) => throw new AuthenticationException() + case (None, _) => Logger.debug("[securesocial] No check needed for groups") + } + (application.configuration.getList("securesocial.keycloak.roles"), roles) match { + case (Some(conf), Some(keycloak)) => { + val conflist = conf.unwrapped().asScala.toList + if (keycloak.intersect(conflist).isEmpty) { + throw new AuthenticationException() + } + } + case (Some(_), None) => throw new AuthenticationException() + case (None, _) => Logger.debug("[securesocial] No check needed for roles") + } + user.copy( + identityId = IdentityId(userId, id), + firstName = firstName.getOrElse(""), + lastName = lastName.getOrElse(""), + fullName = fullName.getOrElse({ + if (firstName.isDefined && lastName.isDefined) { + firstName.get + " " + lastName.get + } else if (firstName.isDefined) { + firstName.get + } else if (lastName.isDefined) { + lastName.get + } else { + "" + } + }), + avatarUrl = avatarUrl, + email = email + ) + } + } catch { + case e: Exception => { + Logger.error( "[securesocial] error retrieving profile information from Keycloak", e) + throw new AuthenticationException() + } + } + } +} + +object KeycloakProvider { + val Keycloak = "keycloak" +} diff --git a/conf/play.plugins b/conf/play.plugins index 15e5e7ec4..faaae5ba4 100644 --- a/conf/play.plugins +++ b/conf/play.plugins @@ -21,6 +21,7 @@ #10050:services.CrowdProvider #10051:services.CILogonProvider #10052:services.LdapProvider +#10053:services.KeycloakProvider #10090:services.MailerPlugin #10091:services.AdminsNotifierPlugin #10100:services.TempFilesPlugin diff --git a/conf/securesocial.conf b/conf/securesocial.conf index 9afb107b9..afa4fc019 100644 --- a/conf/securesocial.conf +++ b/conf/securesocial.conf @@ -161,6 +161,18 @@ securesocial { #groups=["cn=org_isda,ou=Groups,dc=ncsa,dc=illinois,dc=edu"] } + keycloak { + authorizationUrl="http://localhost:8080/keycloak/realms/clowder/protocol/openid-connect/auth" + accessTokenUrl="http://localhost:8080/keycloak/realms/clowder/protocol/openid-connect/token" + userinfoUrl="http://localhost:8080/keycloak/realms/clowder/protocol/openid-connect/userinfo" + clientId=your_client_id + clientSecret=your_client_secret + scope="profile email roles" + # Example of filtering by groups and/or roles + # groups=["group1", "group2"] + # roles=["role1", "role2"] + } + ldap { url="http://localhost/ldap" hostname="ldap.example.com" diff --git a/public/securesocial/images/providers/keycloak.png b/public/securesocial/images/providers/keycloak.png new file mode 100644 index 0000000000000000000000000000000000000000..7387557f708367460a65444aef81fdcdf5fcc945 GIT binary patch literal 2924 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 literal 0 HcmV?d00001 From 6a89ba8cd24f00d8da1467a25d6433956e5748cb Mon Sep 17 00:00:00 2001 From: Rob Kooper Date: Mon, 11 Sep 2023 14:21:15 -0500 Subject: [PATCH 2/3] add citation.cff (#402) * add citation.cff * remove extra title * fix citation * add grants * fix version number * remove leftover " * Updated Todd's affiliation in citation. --------- Co-authored-by: Luigi Marini --- CHANGELOG.md | 5 ++ citation.cff | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 212 insertions(+) create mode 100644 citation.cff diff --git a/CHANGELOG.md b/CHANGELOG.md index 22577f118..cacd2da78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,11 @@ registration or heartbeat to Clowder that will restrict use of that extractor to - Updated lastModifiesDate when updating file or metadata to a dataset, added lastModified to UI [386](https://github.com/clowder-framework/clowder/issues/386) - Disabled button while create dataset ajax call is still going on [#311](https://github.com/clowder-framework/clowder/issues/311) +## Unreleased + +### Added +- added a citation.cff file + ## 1.21.0 - 2022-08-23 **_Important:_** This update requires a MongoDB update schema due to a bug in the original migration of showing summary statistics at the diff --git a/citation.cff b/citation.cff new file mode 100644 index 000000000..e0affaf67 --- /dev/null +++ b/citation.cff @@ -0,0 +1,207 @@ +cff-version: 1.2.0 +message: If you use this software, please cite it using these metadata. +title: "Clowder: Open Source Data Management for Long Tail Data" +abstract: "A customizable and scalable data management system you can install in the cloud or on your own hardware." +type: software +version: "1.21.0" +license: "NCSA" +repository-code: "https://github.com/clowder-framework/clowder" +keywords: + - data-management + - cyberinfrastructure + - clowder + - open-data + - open-science +preferred-citation: + type: article + title: "Clowder: Open Source Data Management for Long Tail Data" + abstract: "Clowder is an open source data management system to support data curation of long tail data and metadata across multiple research domains and diverse data types. Institutions and labs can install and customize their own instance of the framework on local hardware or on remote cloud computing resources to provide a shared service to distributed communities of researchers. Data can be ingested directly from instruments or manually uploaded by users and then shared with remote collaborators using a web front end. We discuss some of the challenges encountered in designing and developing a system that can be easily adapted to different scientific areas including digital preservation, geoscience, material science, medicine, social science, cultural heritage and the arts. Some of these challenges include support for large amounts of data, horizontal scaling of domain specific preprocessing algorithms, ability to provide new data visualizations in the web browser, a comprehensive Web service API for automatic data ingestion and curation, a suite of social annotation and metadata management features to support data annotation by communities of users and algorithms, and a web based front-end to interact with code running on heterogeneous clusters, including HPC resources." + isbn: 9781450364461 + publisher: + name: "Association for Computing Machinery" + doi: 10.1145/3219104.3219159 + collection-title: "Proceedings of the Practice and Experience on Advanced Research Computing" + keywords: + - scientific gateways + - metadata management + - linked data + - data management + - data curation + location: + name: "Pittsburgh, PA, USA" + year: 2018 + authors: + - family-names: Marini + given-names: Luigi + - family-names: Gutierrez-Polo + given-names: Indira + - family-names: Kooper + given-names: Rob + - family-names: Satheesan + given-names: Sandeep Puthanveetil + - family-names: Burnette + given-names: Maxwell + - family-names: Lee + given-names: Jong + - family-names: Nicholson + given-names: Todd + - family-names: Zhao + given-names: Yan + - family-names: McHenry + given-names: Kenton +references: + - institution: "National Science Foundation" + number: "#BCS-0941268" + - institution: "National Science Foundation" + number: "#EAR- 331906" + - institution: "National Science Foundation" + number: "#ACI-1261582" + - institution: "National Science Foundation" + number: "#ACI-1443013" + - institution: "National Science Foundation" + number: "#OCI-0940824" + - institution: "National Science Foundation" + number: "#OCI-0525308" + - institution: "National Science Foundation" + number: "#OAC-1835834" + - institution: "National Institutes of Health" + number: "#1P01AI089556-01A1" + - institution: "Illinois - Indiana Sea Grant" + number: "#DW92329201" + - institution: "European Commission" + number: "#RI-261600" + - institution: "XSEDE" + number: "#OCI-1053575" + - institution: "ARPA-E" + number: "#DE-AR0000594" +authors: + - family-names: "Marini" + given-names: "Luigi" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + orcid: "0000-0002-8511-0211" + - family-names: "Kooper" + given-names: "Rob" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + orcid: "0000-0002-5781-7287" + - family-names: "Gutierrez" + given-names: "Indira" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + orcid: "0000-0001-5684-3419" + - family-names: "Sophocleous" + given-names: "Constantinos" + - family-names: "Burnette" + given-names: "Max" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Nicholson" + given-names: "Todd" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Ondrejcek" + given-names: "Michal" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Zhang" + given-names: "Bing" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Zharnitsky" + given-names: "Inna" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Puthanveetil Satheesan" + given-names: "Sandeep Puthanveetil" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + orcid: "0000-0001-9075-3740" + - family-names: "Padhy" + given-names: "Smruti" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Zhao" + given-names: "Yan" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Liu" + given-names: "Rui" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Vaidya" + given-names: "Ashwini" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Myers" + given-names: "Jim" + orcid: "0000-0001-8462-650X" + - family-names: "Felarca" + given-names: "Mario" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Angelo" + given-names: "Brock" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Roeder" + given-names: "Gene" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Lee" + given-names: "Jong" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Hennessy" + given-names: "Will" + affiliation: "University of Illinois at Urbana-Champaign" + - family-names: "Issaranon" + given-names: "Theerasit" + affiliation: "University of Illinois at Urbana-Champaign" + - family-names: "Guo" + given-names: "Yibo" + affiliation: "University of Illinois at Urbana-Champaign" + - family-names: "Yuan" + given-names: "Xiaocheng" + affiliation: "University of Illinois at Urbana-Champaign" + - family-names: "Kethineedi" + given-names: "Varun" + affiliation: "University of Illinois at Urbana-Champaign" + - family-names: "Kumar" + given-names: "Avinash" + affiliation: "University of Illinois at Urbana-Champaign" + - family-names: "Nayudu" + given-names: "Nishant" + affiliation: "University of Illinois at Urbana-Champaign" + - family-names: "Poelmans" + given-names: "Ward" + affiliation: "Center for Molecular Modeling, Ghent University" + - family-names: "Jansz" + given-names: "Winston" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Jansen" + given-names: "Gregory" + affiliation: "College of Information Studies, University of Maryland" + - family-names: "Navarro" + given-names: "Chris" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Pitcel" + given-names: "Michelle" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Tenczar" + given-names: "Nicholas" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Wang" + given-names: "Chen" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Lambert" + given-names: "Mike" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "McHenry" + given-names: "Kenton" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + orcid: "0000-0003-0367-2550" + - family-names: "Habib" + given-names: "Aaraj" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Galewsky" + given-names: "Ben" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Constantinou" + given-names: "Chrysovalantis" + - family-names: "Karimi-Asli" + given-names: "Kaveh" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Tzima" + given-names: "Maria-Spyridoula" + - family-names: "Johnson" + given-names: "Michael" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Bobak" + given-names: "Mike" + affiliation: "National Center for Supercomputing Applications, University of Illinois at Urbana-Champaign" + - family-names: "Yardley" + given-names: "Tim" From 8517d91c3657dbd7a21fd9d19bbfc0e5ecae8f3e Mon Sep 17 00:00:00 2001 From: Bing Zhang Date: Mon, 11 Sep 2023 14:21:44 -0500 Subject: [PATCH 3/3] add missing SMTP_FROM in docker-comopse yml file (#418) * add missing SMTP_FROM in docker-comopse yml file * add smtp.from in custom.conf * add default smtp.from in custom.conf --------- Co-authored-by: Luigi Marini --- CHANGELOG.md | 1 + docker-compose.yml | 1 + docker/custom.conf | 2 ++ 3 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cacd2da78..41efc4ab3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - Extractors can now specify an extractor_key and an owner (email address) when sending a registration or heartbeat to Clowder that will restrict use of that extractor to them. - Added a dropdown menu to select all spaces, your spaces and also the spaces you have access to. [#374](https://github.com/clowder-framework/clowder/issues/374) +- Add SMTP_FROM in docker-compose yml file. [#417](https://github.com/clowder-framework/clowder/issues/417) - Keycloak provider with secure social [#419](https://github.com/clowder-framework/clowder/issues/419) - Documentation on how to do easy testing of pull requests diff --git a/docker-compose.yml b/docker-compose.yml index 45b90a271..1e9f05fcb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -67,6 +67,7 @@ services: - RABBITMQ_CLOWDERURL=${RABBITMQ_CLOWDERURL:-http://clowder:9000} - SMTP_MOCK=${SMTP_MOCK:-true} - SMTP_SERVER=${SMTP_SERVER:-smtp} + - SMTP_FROM=${SMTP_FROM:-devnull@ncsa.illinois.edu} - CLOWDER_STORAGE=${CLOWDER_STORAGE:-services.filesystem.DiskByteStorageService} - CLOWDER_DISKPATH=${CLOWDER_DISKPATH:-/home/clowder/data} - S3_ENDPOINT=${S3_ENDPOINT:-http://minio:9000} diff --git a/docker/custom.conf b/docker/custom.conf index a7f02f2f1..52f1fb090 100644 --- a/docker/custom.conf +++ b/docker/custom.conf @@ -32,6 +32,8 @@ smtp.mock=true smtp.mock=${?SMTP_MOCK} smtp.host="smtp" smtp.host=${?SMTP_SERVER} +smtp.from="devnull@ncsa.illinois.edu" +smtp.from=${?SMTP_FROM} # storage service.byteStorage=services.filesystem.DiskByteStorageService